ex4.实现一个简单的“栈”

#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#include<stdio.h>
#include<stdlib.h>
typedef int SElemType;
typedef struct{
    SElemType *base;
    SElemType *top;
    int stacksize;
}SqStack;
int InitStack(SqStack &S){
    S.base = (SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
    if(!S.base) exit(-2);
    S.top = S.base;
    S.stacksize = STACK_INIT_SIZE;
    return 1;
}
int GetTop(SqStack S,SElemType &e)
{
    if(S.top == S.base) return -1;
    e = *(S.top-1);
    return 1;
}
int Push(SqStack &S,SElemType e)
{
    if(S.top-S.base >= S.stacksize){
        S.base = (SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
        if(!S.base) exit(-2);
        S.top = S.base + S.stacksize;
        S.stacksize += STACKINCREMENT;
    }
    *S.top++=e;
    return 1;
}
int Pop(SqStack &S,SElemType &e)
{
    if(S.top == S.base)
        return -1;
    e = *--S.top;
    return 1;
}
void Show(SqStack S)
{
    if(S.top == S.base) printf("空栈!\n");
    else{
        SElemType *p = S.top - 1;
        while(p+1!=S.base)
        {
            printf(">%d\n",*p);
            p--;
        }
    }
}
int main()
{
    SqStack s1;
    InitStack(s1);
    Push(s1,5);
    Push(s1,3);
    Push(s1,2);
    int i;
    GetTop(s1,i);
    printf("%d",i);
    printf("------------------\n");
    Show(s1);
}
时间: 2024-12-23 11:50:36

ex4.实现一个简单的“栈”的相关文章

Objective-C实现一个简单的栈

栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表.它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来).栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针. 栈是允许在同一端进行插入和删除操作的特殊线性表.允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom):栈底固定,而栈顶浮动:栈中元素个数为零时称为空栈.插入一般称为进栈(PUSH),删除则称为退栈(POP).

C++算法之 自己写一个简单的栈Stack

// Stack.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using namespace std; enum{COUNT = 8}; typedef int TYPE; class CStack { TYPE m_pData[COUNT]; int m_nTop; int m_nCount; public: bool isFull() { return m_nTop+1>= m_n

一个简单的C stack实现

用C语言实现了一个简单的栈.基本思路是定义一个栈结构体,里面有两个指针和一个表示栈大小的int.两个指针分别指向栈底和栈顶,当栈底指针和栈顶指针重合时,说明栈为空:当栈顶指针减去栈底指针的值大于等于栈的大小,说明栈已满. //mystack.h #ifndef mystack_H #define mystack_H #include <stdio.h> #include <stdlib.h> #define MYSTACK_INCREASE_NUM 2 typedef int El

完成一个简单的时间片轮转多道程序内核代码

王康 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 " 分别是1 存储程序计算机工作模型,cpu执行程序的基础流程: 2 函数调用堆栈:各种寄存器和存储主要是为了指令的传取值,通过eip,esp,eax,ebp和程序内存的分区,搭配push pop call return leave等一系列指令完成函数调用操作. 3 中断:多道批程序! 在复习一下上一讲的几个重要指令

hdu-1237简单计算器(栈的运用)

http://acm.hdu.edu.cn/showproblem.php?pid=1237 简单的栈的运用. 首先将数字和运算符分离,分别保存在两个数组中,然后按原来的式子的顺序,首先将第一个数和第一个运算符分别压 如个自的栈,然后判取出两个栈头部的元素,判断符号,如果是乘除就用当前数值乘取出的数字(优先),然后将乘后的数压入栈, 如果是加则将数和取出的数按原序入栈,如果减,就把新的数变负,将数和取出的数按原序入栈. 最后栈中所有元素的和就是结果. 1 #include<stdio.h> 2

对一个简单的时间片轮转多道程序内核代码的浅析

这周在网易云课堂上学习了<Linux内核分析>——操作系统是如何工作的.本周学习内容有利用 mykernel 实验模拟计算机平台和利用 mykernel 实验模拟计算机硬件平台两部分内容. 这是实验楼中 mykernel 平台运行的结果: 下面是一段一个简单的时间片轮转多道程序内核代码: 1 /* 2 * linux/mykernel/myinterrupt.c 3 * 4 * Kernel internal my_timer_handler 5 * 6 * Copyright (C) 201

一个简单的时间片轮转多道程序内核

朱宇轲 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 本次课程老师为我们演示了一个简单时间片轮转多道程序内核代码,今天我们讲对它进行运行和分析. 实验截图 需要到github上下载mykernel的源代码并加载到Linux系统中.这里需要注意自己的Linux版本,我之前用的是CentOS,不能执行老师提供的命令,重装了ubuntu之后才终于解决了问题,神坑无比TAT 配置完环境

一个简单的截取键盘按键的驱动

近来在学驱动开发,自己写了一个简单地驱动程序,截取键盘按键,另外写的应用程序会显示按键.下面是驱动部分的关键代码,完整代码点击:猛戳这里 /**************************************************************/ #include "KeyFilter.h" /************************************************************************ * 函数名称:DriverE

理解计算机的工作方式——通过汇编一个简单的C程序并分析汇编代码

Author: 翁超平 Notice:原创作品转载请注明出处 See also:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000  本文通过汇编一个简单的C程序,并分析汇编代码,来理解计算机是如何工作的.整个过程都在实验楼上完成,感兴趣的读者可以通过上面给出的课程链接自行动手学习.以下是实验过程和结果. 一.操作步骤 1.首先在通过vim程序建立main.c文件.代码如下: 图1 2.使用如下命令将main.c编