c语言顺序栈的表示和实现

来源:互联网 发布:网络运营者为用户 编辑:程序博客网 时间:2024/05/16 04:40
#define STACK_INIT_SIZE 100//初始大小(100个数据长度)#define STACKINCREMENT 10//栈的分配增量typedef int ElemType;//栈储存的数据类型typedef enum {ERROR = 0,OK = 1}Status;//枚举返回函数运行结果typedef struct {ElemType *base;//栈底指针,指向malloc分配的内存ElemType *top;//栈顶指针,初始值指向栈底,出栈top--,入栈top++,指向栈顶元素的后一位置。int stacksize;//当前栈可储存的数据的最大长度}SqStack;Status InitStack(SqStack &s) {s.base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));//为栈顶指针分配内存if (!s.base){printf("内存分配失败");exit(0);}s.top = s.base;s.stacksize = STACK_INIT_SIZE;//当前栈可储存的数据的最大长度为初始分配长度return OK;}Status GetTop(SqStack s, ElemType &e) {if (s.base == s.top){printf("空栈");return ERROR;}e = *(s.top - 1);//top指针指向的内存的前一个为栈顶return OK;}Status Push(SqStack &s, ElemType e) {if (s.stacksize<=s.top - s.base)//超过当前最大长度,增加内存。{s.base = (ElemType *)realloc(s.base,(STACKINCREMENT+s.stacksize)* sizeof(ElemType));if (!s.base){printf("分配失败");exit(0);}s.top = s.base + s.stacksize;//没啥用?s.stacksize += STACKINCREMENT;}*(s.top++) = e;return OK;}Status Pop(SqStack &s, ElemType &e) {if (s.base==s.top){printf("空栈");return ERROR;}e = *(--s.top);return OK;}

原创粉丝点击