顺序栈作业

#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。
typedef int SElemType; //SElemType 为可定义的数据类型,此设为int类型

#define MAXSIZE 100//存储空间的初始分配量

typedef struct
{
	SElemType *base;//栈底指针
	SElemType *top;//栈顶指针
	int stacksize;//最大容量
}SqStack;

Status InitStack(SqStack &S)
{
	//构造一个空栈
	S.base=new SElemType[MAXSIZE];//动态分配数组空间
	if(!S.base) exit(OVERFLOW);//存储分配失败
	S.top=S.base;
	S.stacksize=MAXSIZE;//最大容量
	return OK;
}

Status Push(SqStack &S,SElemType e)
{
	//插入e为新的栈顶元素
	if(S.top-S.base==S.stacksize) return ERROR;//栈满
	*S.top++=e;//将元素e压入栈顶,栈顶指针加1
	return OK;
}

Status Pop(SqStack &S,SElemType &e)
{
	//删除栈顶元素,用e返回其值
	if(S.top==S.base) return ERROR;//栈空
	e=*--S.top;//栈顶指针减1,将栈顶元素赋给e
	return OK;
}

SElemType GetTop(SqStack S)
{
	//返回栈顶元素,不修改栈顶指针
	if(S.top!=S.base)//栈非空
		return *(S.top-1);//返回栈顶元素的值,栈顶指针不变
}

Status PrintStack(SqStack S)
{
	//遍历输出
	SElemType *p=S.base;
	while(p!=S.top)
	{
		cout<<*p<<"\t";
		p++;
	}
	cout<<endl;
	return OK;
}

Status CleanStack(SqStack S)
{
	//清空栈
	if(S.base) 
		S.top=S.base;
	return OK;
}

Status DestoryStack(SqStack &S)
{
	//销毁栈
	if(S.base)
	{
		delete S.base;
		S.stacksize=0;
		S.base=S.top=NULL;
	}
	return OK;
}

int main()
{
	SqStack s;
	InitStack(s);
	int choose = 0;
	int e1,e2,e3;
    if (!InitStack(s)) 
    {
        cout << "初始化失败" << endl;
    }
    cout << "1、入栈" << endl;
    cout << "2、出栈" << endl;
    cout << "3、取栈顶" << endl;
    cout << "4、遍历" << endl;
    cout << "5、清空" << endl;
    cout << "6、销毁" << endl;
    cout << "7、退出" << endl;
    while (choose != 9)
    {
        cout << "请输入要做的操作" << endl;
        cin >> choose;
        switch (choose)
        {
        case 1:
        	cout<<"请输入想要入栈的元素值:"<<endl;
				cin>>e1;
				Push(s,e1);
            break;
        case 2:
            Pop(s,e2);
            cout<<"弹出的元素为"<<e2<<endl;
            break;
        case 3:
            e3=GetTop(s);
            cout<<"栈顶元素为"<<e3<<endl;
            break;
        case 4:
            PrintStack(s);
            break;
        case 5:
            CleanStack(s);
            break;
        case 6:
            DestoryStack(s);
            cout<<"已销毁"<<endl; 
            break;
        default:
            break;
        }
    }
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值