PS:如果手机显示不完全可以用电脑查看
#include<stdio.h>
#include<stdlib.h>
#define ok 1
#define error 0
#define stack_init_size 100 //存储空间的初始分配量
#define stackincrement 10 //增加内存空间时的增量
typedef int status;
typedef int selemtype;
typedef struct {
selemtype *base; //基址
selemtype *top; //长度 (元素的个数)
int stacksize; //当前分配的存储容量
}sqstack;
status initstack(sqstack &s)//构造一个空栈
{
s.base = (selemtype*)malloc(stack_init_size*sizeof(selemtype));//申请栈底
if (!s.base)
return error;
s.top = s.base;//使栈顶指向栈底,为空栈
s.stacksize = stack_init_size;//栈的最大容量
return ok;
}
status destroystack(sqstack &s)//将栈销毁
{
while (s.top!=s.base)
{
*--s.top;
free(s.top);
}
return ok;
}
status clearstack(sqstack &s)//将栈置空
{
s.top = s.base;
return ok;
}
status stackempty(sqstack s)//判断栈是否为空
{
if (s.top == s.base)
return ok;
else
return error;
}
void stacklength(sqstack s)//求栈的长度
{
int i = s.top - s.base;
printf("此时栈的长度为:%d\n",i);
}
status gettop(sqstack s, selemtype &e)//用e返回s的栈顶元素
{
if (s.top == s.base)
return error;//空栈的情况
e = *(s.top-1);//栈顶指针指向的是栈顶的的下一个空间
return ok;
}
status push(sqstack &s, selemtype e)//插入元素e为新的栈顶元素
{
if (s.top - s.base >= s.stacksize)//栈满,追加空间
{
//s.base = (selemtype*)malloc(s.base, (s.stacksize + stackincrement)*sizeof(selemtype));
if (!s.base)
return error;//存储分配失败
s.top = s.base + s.stacksize;
s.stacksize += stackincrement;
}
*s.top++ = e;
return ok;
}
status pop(sqstack &s, selemtype &e)//删除s的栈顶元素,并用e返回其值
{
if (s.top == s.base)
return error;
e = *--s.top;
return ok;
}
status printstack(sqstack s)//输出栈中的元素
{
while (s.top != s.base)
{
printf("%3d\n", *--s.top);
}
return ok;
}
int main()
{
int i;
selemtype e;
sqstack s;
initstack(s);
printf("将1~5依次圧入栈后的栈状态为:\n");
for (i = 1; i <= 5; i++)
push(s, i);
printstack(s);
stacklength(s);
printf("取出栈顶元素后的栈为:\n");
pop(s,e);
printstack(s);
stacklength(s);
printf("被取出的栈顶元素是:%d\n", e);
gettop(s, e);
printf("此时新的栈顶元素为:%d\n", e);
clearstack(s);
if (stackempty(s) == ok)
printf("置空后已是空栈!\n");
else
printf("置空失败,不是空栈!\n");
system("pause");
return 0;
}