栈的顺序存储结构

要求:利用书本上的栈的顺序存储结构定义:

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
#define MAXSIZE 100
typedef int ElemType;
typedef int Status;
typedef struct
{
    ElemType *base;
    ElemType *top;
    int stacksize;
}Sqstack;//定义栈结构体
Status InitStack(Sqstack &S)
{
    S.base=new ElemType[MAXSIZE];
    if(!S.base)
        return ERROR;
    S.top=S.base;
    S.stacksize=MAXSIZE;
    return OK;
}//创建空栈
void TraverStack(Sqstack S)
{
    while(S.base!=S.top)
    {
        printf("%4d",*--S.top);
    }
    printf("\n");
}
Status EvaluStack(Sqstack &S)
{
    if(S.top-S.base==MAXSIZE)//判断是否栈满
    {
        printf("很抱歉,栈已满\n");
        return ERROR;
    }
    srand(time(0));
    for(int i=0;i<5;i++)//随机为栈赋值五个数字
    {
        *S.top++=rand()%100+1;
    }
    TraverStack(S);
    return OK;
}
Status PushStack(Sqstack &S,ElemType x)
{
    if(S.top-S.base==MAXSIZE)//判断是否栈满
    {
        printf("很抱歉,栈已满\n");
        return ERROR;
    }
    *S.top++=x;
    printf("%d已插入栈顶\n",x);
    TraverStack(S);
    return OK;
}//向栈顶插入某一元素x
Status PopStack(Sqstack &S)
{
    int x;
    if(S.top==S.base)//判断是否栈空
    {
        printf("很抱歉,栈已空\n");
        return ERROR;
    }
    x=*--S.top;
    printf("删除的栈顶元素为:%d\n",x);
    TraverStack(S);
    return OK;
}
void NumStack(Sqstack S)
{
    int numbers;
    numbers=S.top-S.base;
    printf("栈中元素个数为:%d\n",numbers);
    TraverStack(S);
}
int menu()
{
    printf("菜单:\n");
    printf("1.初始化一个空栈\n2.赋值初始栈\n3.插入元素\n4.删除栈顶元素\n5.查找元素个数\n6.输出栈中元素\n7.结束程序\n");
    printf("请输入您要实施的项目:");
}
int main()
{
    int option,element;
    Sqstack Stack;
    InitStack(Stack);
    menu();
    scanf("%d",&option);
    while(option!=7){//当用户选择结束选项时结束循环
    switch(option)
	{
    case 1:
        printf("1.栈初始化完成!\n");
        break;
	case 2:
		printf("2:赋值初始空栈\n");
		EvaluStack(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);
		break;
	case 6:
	    printf("6.输出元素:\n");
		TraverStack(Stack);
		break;
    default:
        printf("输入菜单名称错误\n");//防止用户输入非正常数字
        break;
	}
	menu();
    scanf("%d",&option);
	};
	printf("程序已结束,bye!");
	return 0;
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值