要求:利用书本上的栈的顺序存储结构定义:
1)编写完成下列功能的函数:(1)初始化一个栈;(2)在已经初始化的基础上,创建一个包含5个不大于100的正整数值的栈(5个值由计算机随机产生);(3)将一个数x插在栈顶(x在程序运行时输入);(4)将栈顶元素弹出, 并在弹出结束后输出弹出元素的值;(5)求栈中元素的个数;(6)输出从栈顶到栈底的所有元素。
2)要求编一菜单,根据选项逐个调用各函数执行,并在使栈有所变化的每一步输出从栈顶到栈底的所有元素,以
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<ctime>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int ElemType;
typedef int Status;
typedef struct StackNode
{
ElemType data;
StackNode *next;
}StackNode,*LinkStack;//定义栈链式结构体
Status InitStack(LinkStack &S)
{
S=NULL;
return OK;
}
void TrasveStack(LinkStack S)
{
LinkStack p=S;
while(p!=NULL)
{
printf("%4d",p->data);
p=p->next;
}
printf("\n");
}
Status ValueStack(LinkStack &S)
{
LinkStack p;
srand(time(0));
for(int i=0;i<5;i++)
{
p=(LinkStack)malloc(sizeof(StackNode));
p->data=rand()%100+1;
p->next=S;
S=p;
}
TrasveStack(S);
return OK;
}//为栈赋值五个随机数
Status PushStack(LinkStack &S,ElemType x)
{
LinkStack p;
p=(LinkStack)malloc(sizeof(StackNode));
p->data=x;
p->next=S;
S=p;
TrasveStack(S);
return OK;
}//向栈顶插入一元素x
Status PopStack(LinkStack &S)
{
if(S==NULL)
{
printf("很抱歉,栈已空\n");
return ERROR;
}
LinkStack p;
int x;
x=S->data;
p=S;
S=S->next;
free(p);
printf("删除的栈顶元素为:%d\n",x);
TrasveStack(S);
return OK;
}//删除栈顶元素
void NumStack(LinkStack S)
{
int sum=0;
while(S)
{
sum++;
S=S->next;
}
printf("栈中元素个数%d\n",sum);
}//遍历栈中元素,查找元素个数
int menu()
{
printf("菜单:\n");
printf("1.初始化一个空栈\n2.赋值初始栈\n3.插入元素\n4.删除栈顶元素\n5.查找元素个数\n6.输出栈中元素\n7.结束程序\n");
printf("请输入您要实施的项目:");
}
int main()
{
int option,element;
LinkStack Stack;
InitStack(Stack);
menu();
scanf("%d",&option);
while(option!=7){//当用户选择结束选项时结束循环
switch(option)
{
case 1:
printf("1.栈初始化完成!\n");
break;
case 2:
printf("2:赋值初始空栈\n");
ValueStack(Stack);
break;
case 3:
printf("3:插入一个数字\n");
printf("插入元素数值:");
scanf("%d",&element);
PushStack(Stack,element);
break;
case 4:
printf("4:删除一个栈顶元素\n");
PopStack(Stack);
break;
case 5:
printf("5:查找元素\n");
NumStack(Stack);
TrasveStack(Stack);
break;
case 6:
printf("6.输出元素:\n");
TrasveStack(Stack);
break;
default:
printf("输入菜单名称错误\n");//防止用户输入非正常数字
break;
}
menu();
scanf("%d",&option);
};
printf("程序已结束,bye!");
return 0;
}
验证你编程序的正确性。