栈的基本操作

#include<iostream>
#include<stdlib.h>
#define ERROR 0 
#define OK 1
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10

using namespace std;
typedef struct{
    int *base;
    int *top;
    int size;
}sqs;

int Destroy(sqs S)
{
    if (!S.base)     return ERROR; //若栈未建立
    free (S.base);// 回收栈空间
    S.base = S.top = NULL ;
    S.size = 0 ;
    cout<<"成功销毁"<<endl;
    return OK ;
}
int Clear(sqs S)
{
    if (!S.base)     return ERROR; //若栈未建立
    S.top=S.base;
}
int Empty(sqs S)
{
    if(!S.base)     return ERROR; //若栈未建立
    if(S.top=S.base)
    cout<<"栈为空"<<endl;
    else
    cout<<"栈不为空"<<endl;
}
int Len(sqs S)
{
    if(!S.base)     return ERROR; //若栈未建立
    int len=0;
    int *p;
    if(!S.base)     return ERROR; //若栈未建立
    p=--S.top;
    while(p!=(S.base-1))
    {
        p--;
        len++;
    }
    cout<<"栈的长度为:"<<len<<endl;
}
int head(sqs S)
{
    if(!S.base)     return ERROR; //若栈未建立
    return *--S.top;
}
int cha(sqs S,int n)
{
    if(!S.base)     return ERROR; //若栈未建立
    if(S.top-S.base>=S.size)//当前储存空间已满,需要分配新的空间
        {
            S.base=(int*)realloc(S.base,(S.size+STACKINCREMENT)*sizeof (int));
            if(!S.base)
            cout<<"存储空间分配失败"<<endl;
            else
            {
            S.top=S.base+S.size;
                S.size+=STACKINCREMENT;
            }
        }
    *S.top++=n;
}
int Del(sqs S)
{
    int e;
    if(!S.base)     return ERROR; //若栈未建立
    e=*--S.top;
    cout<<e<<endl;
}
int shuchu(sqs S)
{
    int *p;
    p=--S.top;
    while(p!=(S.base-1))
    {
        cout<<*p--<<" ";
        
    }
    cout<<endl;
}
sqs CreatS(sqs S)
{
    int n;
    S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
    if(!S.base) exit(0);
    S.top=S.base;
    S.size=STACK_INIT_SIZE;
    cout<<"请输入你要的元素个数"<<endl;
    cin>>n;
    cout<<"请输入"<<n<<"个元素"<<endl;
    for(int i=0;i<n;i++)
    {
        cin>>*S.top++;
    }
    return S;
}

int show()
{
    cout<<"1----销毁栈"<<endl;
    cout<<"2----将栈置空"<<endl;
    cout<<"3----判断栈是否为空栈"<<endl;
    cout<<"4----求栈的长度"<<endl;
    cout<<"5----求栈顶元素"<<endl;
    cout<<"6----插入元素,并使其成为栈顶元素"<<endl;
    cout<<"7----删除栈顶元素,并返回其值"<<endl;
    cout<<"8----输出栈内元素"<<endl;
    cout<<"9----初始化创建并输入栈元素"<<endl;
    cout<<"10---退出,输出一个负数!"<<endl;
 } 
int main()
{
    show();
    sqs S;
    int n;
    while(1)
    {    
        cout<<"请输入您想要进行的操作"<<endl;
        cin>>n;
        if(n==1)
        Destroy(S);
        if(n==2)
        Clear(S);
       if(n==3)
        Empty(S);
        if(n==4)
        Len(S);
        if(n==6)
        {
            int e;
        cout<<"请输入你要插入的栈顶元素值"<<endl;
        cin>>e;
        cha(S,e);
        }
        if(n==5)
        head(S);
        if(n==7)
        Del(S);
        if(n==8)
        shuchu(S);
        if(n==9)
        S=CreatS(S);
    }
    
    
}


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值