顺序栈的基本操作

#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#define MAXSIZE 100//存储空间的初始分配量
#define OVERFLOW -2; 
#define ERROR 0; 
#define OK 1; 
typedef int SElemType;
typedef int Status;
 
//顺序栈
typedef struct//结构体存放指针变量 
{
    SElemType *base;//栈底
    SElemType *top;//栈顶
    int stacksize;//最大容量
    
 }SqStack;
 
int InitStack(SqStack &S) //栈的初始化 
{//构造空栈S
    S.base =new SElemType[MAXSIZE];//顺序栈动态分配MAXSIZE的数组空间 
    if(!S.base) return OVERFLOW;//存储分配失败 
    S.top =S.base ;//top和base指向栈底 
    S.stacksize=MAXSIZE;//stacksize置为栈的最大容量MAXSIZE
    return 1;
}
int Push(SqStack &S, SElemType e)//入栈 
{//插入e为栈顶元素
    if(S.top-S.base==S.stacksize) return ERROR;//栈满,报错 
    *S.top++=e;//e压入栈底,栈顶指针加一 
    return 1;
}
void Pop(SqStack &S,ElemType &e) //出栈 
{//删除栈顶元素,e返回其值
    if(S.top ==S.base ) return ERROR;//栈空报错 
    e=*--S.top ;//栈顶指针-1,赋给e 
    return 1;
}
int GetTop(SqStack S)//取栈顶元素 
{//返回S的栈顶元素,但不修改栈顶指针 
    if(S.top !=S.base ) //栈非空
        return *(S.top-1) ;//返回栈顶元素值,栈顶指针不变     
    return ERROR;//栈空时返回错误值
}
void traverse_Stack(SqStack S)
{
    cout<<"栈中的元素有:";
    while(S.top!=S.base)
    {
        S.top--;
        cout<<*S.top<<" ";
    }
    return;
}
// 销毁栈  
void DestroyStack(SqStack *S) {  
    free(S->base);  
    S->base = S->top = NULL;  
    S->stacksize = 0;  
}
//菜单
void menu()
{printf("********* 1.入栈 **********");
printf("********** 2.出栈 **********");
printf("********** 3.遍历 **********");
printf("******* 4.取栈顶元素 *******");  
printf("****** 5.结束程序运行 ******"); 
}  

main() 
{
     int select;
    SqStack S;

    InitStack(S);

    while(true)
    {
        menu();
        cin>>select;
        if(select==5)
        {
            cout<<"程序运行结束,再见!"<<endl;
            break;
        }
        else if(select>5||select<=0)
        {
            cout<<"输入数字错误,请重新输入!"<<endl;
            system("pause");
            system("cls");
        }

        switch(select)
        {
            case 1:
                Push(S,e);
                system("pause");
                system("cls");
            break;
            case 2:
                Pop(S,e);
                system("pause");
                system("cls");
            break;
            case 3:
                traverse_Stack(S);cout<<endl;
                system("pause");
                system("cls");
            break;
            case 4:
                GetTop(S,e);
                system("pause");
                system("cls");
            break;
        }
    }
    return 0;        
}

  • 12
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

实践—认识

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值