📄 栈的顺序存储.cpp
字号:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef int selemtype;
int ok=0;
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10
typedef struct {
selemtype *base;
selemtype *top;
int stacksize;
int length;
}SqStack;
void InitStack(SqStack *s)
{
if (ok==1)
printf("线性表以前已创建!\n");
else {
s->base = (selemtype *) malloc (STACK_INIT_SIZE *sizeof(selemtype));
if(!s->base) exit(4);
s->top=s->base;
s->stacksize = STACK_INIT_SIZE;
s->length=0;
ok=1;
printf("空栈已经建立!\n"); }
}
void destroystack(SqStack *s)
{
free(s->base);
s->base=s->top=NULL;
s->stacksize=0;
s->length=0;
printf("空栈已经销毁!\n");
ok=0;
}
void clearstack(SqStack *s)
{
if (s->top!=s->base) {
s->base = (selemtype *) realloc (s->base,STACK_INIT_SIZE *sizeof(selemtype));
s->top=s->base;
s->length=0;
s->stacksize = STACK_INIT_SIZE;}
printf("栈已经为空!\n");
}
void judgestack(SqStack *s)
{
if (s->base==s->top)
printf("栈为空!\n");
else printf("栈不是空的!\n");
}
void getlength(SqStack *s)
{
printf("栈的元素个数为:%d\n",s->length);
}
void gettop(SqStack *s)
{
int e=0;
if (s->base == s->top)
printf("空栈!\n");
else
printf("栈顶元素为:%d\n",e=*(s->top-1));
}
void push(SqStack *s,int e)
{
if(s->top - s->base>=s->stacksize) {
s->base = (selemtype *) realloc (s->base,STACKINCREMENT *sizeof(selemtype));
if(!s->base) exit (2);
s->top=s->base + s->stacksize;
s->stacksize +=STACKINCREMENT;
}
*s->top++ = e;
++(s->length);
printf("已经插入栈顶!\n");
}
void pop(SqStack *s)
{
int e;
if(s->top==s->base)
printf("栈是空的!\n");
else {
e= * --s->top;
printf("栈顶元素%d已经删除!\n",e);
--(s->length);
}
}
void visits(SqStack *s)
{
int *v;
if(s->top==s->base)
printf("栈是空的!\n");
else {
printf("栈底:");
for (v=s->base;v!=s->top;v=v+1)
printf("%d->",*v);
printf("栈顶!\n");
}
}
int main()
{
int a,e;
SqStack s;
printf("栈的顺序储存结构程序!\n");
do {
printf(" 1 创建一个空栈\n");
printf(" 2 销毁栈\n");
printf(" 3 重置栈为空\n");
printf(" 4 判断栈是否为空\n");
printf(" 5 读取栈的数据元素个数\n");
printf(" 6 读取栈顶元素\n");
printf(" 7 插入新元素作为新的栈顶\n");
printf(" 8 删除栈顶元素\n");
printf(" 9 读取从栈底到栈顶的每一个数据元素\n");
printf(" 0 退出程序\n");
printf("请输入你的选择?");
scanf("%d",&a);
if( ok==0&&(a!=1&&a!=0))
printf("多项式还没建立,你必须先建立,麻烦合作!\n");
else {
switch (a) {
case 1:
InitStack(&s);
break;
case 2:
destroystack(&s);
break;
case 3:
clearstack(&s);
break;
case 4:
judgestack(&s);
break;
case 5:
getlength(&s);
break;
case 6:
gettop(&s);
break;
case 7:
printf("请输入你要插入的元素:");
scanf("%d",&e);
push(&s,e);
break;
case 8:
pop(&s);
break;
case 9:
visits(&s);
break;
case 0:
printf("谢谢使用,欢迎你下次光临!\n");
break;
default:
printf("错误输入,请你看准再选择!\n");
break;
}
}
}while (a!=0);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -