堆栈.cpp
来自「实现顺序栈的操作(栈空判断、入栈、出栈、读取栈顶元素)。」· C++ 代码 · 共 121 行
CPP
121 行
#define STACK_INIT_SIZE 10//定义栈的出使大小
#define STACKINCREMENT 10//定义栈的填补增量
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<conio.h>
typedef struct
{ int* top;
int* base;
int stacksize;
}SqStack;
void print()
{
}
int InitStack(SqStack &S)
//构造一个空栈,等待操作,成功返回1,失败退出程序
{ S.base=(int*)malloc(STACK_INIT_SIZE*100*sizeof(int));//在内存分配空间
if(!S.base)exit(1);//分配内存失败,异常退出
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;//定义栈的初始大小为10
return 1;
}
int Push(SqStack &S,int e)
//实现进栈操作,把e放到S的栈顶
{ int *p1;//该变量为输出做准备
p1=S.base;
if(S.top-S.base>=S.stacksize)
{S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));//当超出了初始大小的时候
if(!S.base)exit(1);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;}
*S.top++=e;
system("cls");//清屏函数
print();
printf("现在栈内的元素顺序为:\n");
while(p1<S.top)
{printf("%-8d",*p1);*++p1;}
printf("\n\n\n");
return 1;
}
int Pop(SqStack &S,int &e)
//栈顶元素出栈
{
int *p1;
p1=S.base;
if(S.top==S.base)//如果栈顶等于栈底,栈为空
return 0;
e=*--S.top;
system("cls");
print();
printf("现在栈内的元素顺序为:\n");
while(p1<S.top)
{printf("%-8d",*p1);*++p1;}
printf("\n\n\n");
return 1;
}
int StackEmpty(SqStack S)
{ if(S.base==S.top)
return 1;
else
return 0;
}
void main()
{
print();
SqStack S;
InitStack(S);
printf("初始化栈操作已经完成\n");
int choise=0,e=0,flag;
while(choise!=4)
{
printf("请选择你想进行的操作:\n");
printf("1.进栈操作\n2.出栈操作\n3.判断该栈是否为空\n4.退出\n");
scanf("%d",&choise);
switch(choise)
{case 1:
printf("请输入要进栈的元素。\n");
scanf("%d",&e);
Push(S,e);break;
case 2:
if(flag=Pop(S,e))
{printf("操作成功,出栈元素为%d\n\n\n",e);break;}
else
{ system("cls");
print();
printf("不能出栈,栈为空栈\n");
printf("\n\n\n");
break;
}
case 3:
system("cls");
print();
if(flag=StackEmpty(S))
printf("是空栈\n\n\n");
else
printf("非空栈!\n\n\n");
break;
case 4:
printf("多谢使用~SEE YOU!\n");
exit(0);
default:
system("cls");
print();
printf("输入错误!请重新输入!\n\n\n");
choise=0;
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?