今天把顺序栈学习了,把代码分享一下,如有问题请留言指出,希望和大家共同进步。
代码如下:
#include "stdio.h"
typedef int SElemType;
typedef int Status;
#define MAXSIZE 100
#define OK 1
#define ERROR 0
typedef struct
{
SElemType *base;//栈底指针
SElemType *top;//栈顶指针
int stacksize;//栈可用最大容量
}SqStack;
//顺序栈的初始化
Status InitStack(SqStack &S)
{
//构造一个空栈
S.base = new SElemType(MAXSIZE);
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
//入栈
void Push(SqStack &S)
{
int data = 0;
printf("请插入元素:\r\n");
scanf_s("%d", &data);
*S.top = data;
S.top++;
//printf("入栈成功\r\n");
}
//出栈
void Pop(SqStack &S)
{
if (S.top == S.base)
{
printf("栈为空\r\n");
}
S.top--;
}
//取栈顶元素
void GetTOP(SqStack &S)
{
printf("栈顶元素为:%d\r\n", *(S.top-1));
}
//打印栈
void Printf(SqStack &S)
{
SqStack p=S;
while (p.top != p.base)
{
p.top--;
printf("%d\t", *(p.top));
}
printf("\r\n");
}
//创建栈
void CreateStack(SqStack &S)
{
int num = 0,data = 0;
printf("输入栈中元素的个数\r\n");
scanf_s("%d", &num);
//printf("请输入栈中元素\r\n");
for (int j = 0; j < num; j++)
{
//scanf_s("%d", &data);//(Push(S.top))
Push(S);
}
}
void InitMenu()
{
printf("------菜单------\r\n");
printf("1.创建栈\r\n");
printf("2.查看栈\r\n");
printf("3.插入节点\r\n");
printf("4.删除节点\r\n");
printf("5.查看栈顶元素\r\n");
printf("0.退出\r\n");
}
int main()
{
int i = 0;
SqStack S;
InitStack(S);
InitMenu();
while (scanf_s("%d", &i))
{
switch (i)
{
case 1:CreateStack(S); InitMenu(); break;//创建栈
case 2:Printf(S); InitMenu(); break;//打印
case 3:Push(S); InitMenu(); break;//插入节点
case 4:Pop(S); InitMenu(); break; //删除节点
case 5:GetTOP(S); InitMenu(); break;//查找栈顶元素
default: return 0; break;// 关闭窗口
}
}
}
运行结果如下:
创建栈:
增加节点:
删除节点:
取栈顶元素: