顺序栈最终版
作者:互联网
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
#define OK 1
#define MAXSIZE 100
#define Error 0
#define Status int
typedef int ElemType;
typedef struct SqStack
{
ElemType* base;
ElemType* top;
int stacksize;
}SqStack;
Status Forceuser()//强制用户输入int类型的数据//
{
int num;
while (!(scanf_s("%d", &num) && getchar() == '\n'))
{
while (getchar() != '\n');//清空缓存区
printf("你输入的数据有误,请再输一遍!\n");
}
return num;
}
void InitStack(SqStack& S)
{
printf("开始初始化...\n");
S.base = new ElemType[MAXSIZE];
if (!S.base)exit(0);
S.top = S.base;
S.stacksize = MAXSIZE;
printf("初始化完毕\n");
}
Status CreateStack(SqStack& S)//输入//
{
InitStack(S);//c
printf("请输入int类型的数据,输入0结束输入\n");
int n = 0;
while (true)
{
n = Forceuser();
if (n != 0)
{
*S.top = n;
S.top++;
}
else break;
}
printf("录入完毕\n");
return OK;
}
Status Push(SqStack& S)//入栈
{
if (S.top - S.base == S.stacksize)
return Error;
int e;
printf("入栈的元素为:");
e = Forceuser();
*S.top = e;
S.top++;
return OK;
}
Status PoP(SqStack& S, ElemType& e)//出栈
{
if (S.top == S.base)
return Error;
S.top--;
e = (*S.top);
*S.top = NULL;
return OK;
}
Status GetElem(SqStack S, ElemType& e)//获得栈顶元素//
{
if (S.base == S.top) return Error;
e = *(S.top - 1);
printf("%d",e);
return OK;
}
Status Getlength(SqStack S, int& l)//获取长度//
{
if (S.base == S.top)
return Error;
l = S.top - S.base;
return OK;
}
Status DisplaySStack(SqStack S)//遍历//
{
printf("开始遍历...\n");
if (S.base == S.top)
{
printf("空栈\n");
return Error;
}
while (true)
{
S.top--;
printf("%d ", *S.top);
if (S.top == S.base)
break;
}
printf("\n遍历完毕\n");
return OK;
}
void menu(int nn,SqStack &S)
{
int e, GetElemnum, Length;
switch (nn)
{
case 1:
Push(S);
DisplaySStack(S);
break;
case 2:
PoP(S, e);
printf("出栈元素为:%d\n", e);
DisplaySStack(S);
break;
case 3:
GetElem(S, GetElemnum);
printf("栈顶元素为:%d\n",GetElemnum);
break;
case 4:
Getlength(S, Length);
printf("栈长为:%d\n",Length);
break;
case 5:
DisplaySStack(S);
default:
break;
}
}
int main()
{
SqStack S;
int nn;
CreateStack(S);
while (true)
{
printf("\n----------------------\n0表示结束\n1为入栈操作\n2为出栈操作\n3为获取栈顶元素操作\n4为获取当前栈的长度操作\n5为遍历操作\n请输入操作序号\n----------------------\n");
nn = Forceuser();
while (true)
{
if (nn >= 0 && nn <= 5)
break;
printf("输入的数据无效,请重新输入\n");
nn = Forceuser();
}
if (nn == 0)
{
break;
}
menu(nn,S);
}
}
标签:顺序,return,SqStack,int,top,最终版,base,printf 来源: https://blog.csdn.net/qq_53679247/article/details/121229977