数据结构实验二顺序栈

#include <stdio.h>
#include <iostream> 
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int Status;

#define MAXSIZE 100
typedef int SElemType; 
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;
}

bool StackEmpty(SqStack S){
    //判断栈是否为空 
    return (S.base==S.top);
}

int StackLength(SqStack S){
    //栈的长度 
    return(S.top-S.base);
}

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

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

Status Pop(SqStack &S,SElemType &e){
    //删除S的栈顶元素,用e返回其值
    if(S.top==S.base) return ERROR;
    e=*--S.top;
    return OK; 
    }

void StackTraverse(SqStack S){
    //从栈底到栈顶依次对栈中每个元素显示 
    SElemType *p=S.top-1;
    while (p>=S.base){
        cout<<"\n            "<<*p;
        p--;
    }
}

void ClearStack(SqStack &S){
    //清空栈 
    S.base=S.top;
}

void DestroyStack(SqStack &S){
    //销毁栈 
    delete []S.base;
    S.stacksize=0;
    S.top=NULL;
    S.base=NULL;
}
 

#include "comdef.h"
#include "sqstackdef.h"
#include "sqstackapp.h"
int main(){
    SElemType e; 
    SqStack S;
    int choice;    
    if (InitStack(S)==OVERFLOW){
          cout<<"栈的初始化失败,程序退出!";
         return 0;
         }
    else{
          cout<<"栈的初始化成功;";
    } 
    do { 
        cout<<"\n\n===================================";
        cout<<"\n        顺序栈的基本操作           ";
        cout<<"\n===================================";
        cout<<"\n           1:判断栈是否为空" ;
        cout<<"\n           2:求栈的长度" ;
        cout<<"\n           3:取栈顶" ;
        cout<<"\n           4:入栈" ;         
        cout<<"\n           5:出栈" ;
        cout<<"\n           6:输出栈" ;
        cout<<"\n           7:清空栈" ;            
        cout<<"\n           0:操作结束" ;
        cout<<"\n===================================";
        cout<<"\n请输入你的选择:"; 
        cin>>choice;
        switch (choice){
            case 1:    if(StackEmpty(S)) 
                        cout<<"\n栈为空!" ;
                    else
                        cout<<"\n栈不为空!" ;
                       break;
            case 2:    cout<<"\n栈的长度为:"<<StackLength(S); 
                       break;
            case 3:    if(StackEmpty(S)) 
                        cout<<"\n栈顶元素为:"<<GetTop(S);
                    else{
                        cout<<"\n该栈为空!栈顶元素不存在!";    
                    }
                       break;           
            case 4:    cout<<"\n输入入栈元素:";
                    cin>>e;
                    if(Push(S,e)==OK)
                        cout<<"\n元素"<<e<<"入栈成功!"; 
                    break;
            case 5:    if(Pop(S,e)==OK)
                        cout<<"\n元素"<<e<<"出栈!";
                    else
                        cout<<"\n栈为空,出栈失败!"; 
                    break;
            case 6:    cout<<"\n从栈顶到栈底的元素依次为:";
                    StackTraverse(S); 
                    break;
            case 7:    cout<<"\n清空栈";
                    ClearStack(S); 
                    break;
            case 0:    break; 
            default:cout<<"\n输入错误,重新输入!";            
        }
    } while (choice) ;    
    DestroyStack(S);    
    return 0; 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值