#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;
}
c语言顺序栈的表示和实现
最新推荐文章于 2023-02-14 12:52:57 发布