发布网友 发布时间:1小时前
共1个回答
热心网友 时间:1分钟前
#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 10
#define STACKINCREMENT 2
#define Status int
#define SElemType int
#define MaxSize 100
#define OK 1
#define ERROR 0
struct SqStack//栈的数据结构
{ SElemType *base;//栈底指针 不变
SElemType *top;//栈顶指针 一直在栈顶元素上一个位置
int stacksize;//栈可用的最大容量
};
Status InitStack(SqStack *s)//初始化栈
{ s->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if(!(*s).base)
{ printf(ERROR);
}
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
return OK;
}
Status Push(SqStack *s,SElemType e)//进栈
{ if(s->top-s->base==s->stacksize) //判断栈满
{ s->base=(int *)realloc((*s).base,(s->stacksize+STACKINCREMENT)*sizeof(int));
if(!s->base)
exit(0);
s->top=s->base+s->stacksize;
s->stacksize+=STACKINCREMENT;
}
*(s->top++)=e;
return OK;
}
Status Pop(SqStack &s,SElemType &e)//出栈 用e返回值
{ if(s.top==s.base)
return 0;//栈空
e=*--(s.top);//先减减 指向栈顶元素,再给e
return e;
}
int PopFromStack(SqStack *s)//输出栈顶到栈底的元素
{ int n;
SElemType e;
//e=malloc (sizeof(int) * 7);
for(n=1; s->top!=s->base; n++)
{ printf("请输入的%d个元素:",n);
scanf("%d",&e);
Push(s,e);
}
}
void Creat(SqStack *s,int a)//创建栈
{ int i,elem;
for(i=1; i<=a; i++)
{ printf("请输入第%d个元素:",i);
scanf("%d",&elem);
Push(s,elem);
}
}
void empty(SqStack *s)//判断是否栈为空
{ if(s->top==s->base)
printf("栈为空\n");
else
printf("栈不空\n");
}
int lenth(SqStack *s)
{ return(s->top-s->base);
}
main()//主函数
{ SqStack s;
int a;
InitStack(&s);
empty(&s);
printf("请输入创建栈的长度");
scanf("%d",&a);
Creat(&s,a);
empty(&s);
printf("栈的长度是:%d\n",lenth(&s));
PopFromStack(&s);
}