栈和队列的操作

实验目的:
(1)掌握栈的顺序存储结构、链式存储结构及其基本操作
(2)掌握队列的顺序存储结构、链式存储结构及其基本操作。

实验内容:
(1)编程实现栈的以下基本操作:建栈,取栈顶元素,入栈,出栈。
(2)编程实现队列的以下基本操作:建队列,取队头元素,入队,出队。

实验代码:

#include<iostream>
using namespace std;
#define MAXSIZE 100
typedef struct//顺序栈
{
    int *base;
    int *top;
    int stacksize;
}sqstack;
int initstack(sqstack &s);
int push(sqstack &s,int e);
int pop(sqstack &s,int e);
int gettop(sqstack &s);

#define MAXQSIZE 100
typedef struct//循环队列
{
    int *base;
    int f;
    int r;
}sqqueue;
int initqueue(sqqueue &q);
int inqueue(sqqueue &q,int e);
int dequeue(sqqueue &q,int &e);
int gethead(sqqueue &q);

int main()
{
    sqstack s;
    sqqueue q;
    cout<<"=============栈与队列的操作=============="<<endl;
    cout<<"1.initstack 2.push 3.pop 4.gettop        "<<endl;
    cout<<"5.initqueue 6.inqueue 7.dequeue 8.gethead"<<endl;
    cout<<"========================================="<<endl;
    int state=0;
    cout<<"input num to choose;";
    cin>>state;
    while(state)
    {
        switch(state)
        {
        case 1:initstack(s);break;
        case 2:
            int n;
            cout<<"input elem:";
            cin>>n;
            push(s,n);break;
        case 3:pop(s,1);break;
        case 4:gettop(s);break;
        case 5:initqueue(q);break;
        case 6:
            int n1;
            cout<<"input elem:";
            cin>>n1;
            inqueue(q,n1);break;
        case 7:int e;dequeue(q,e);break;
        case 8:gethead(q);break;
        }
    cout<<"=============栈与队列的操作=============="<<endl;
    cout<<"1.initstack 2.push 3.pop 4.gettop        "<<endl;
    cout<<"5.initqueue 6.inqueue 7.dequeue 8.gethead"<<endl;
    cout<<"========================================="<<endl;
    cout<<"input num to choose;";
    cin>>state;
    }
    return 0;
}
int initqueue(sqqueue &q)
{
    q.base=new int[MAXQSIZE];
    if(!q.base)
    {
        cout<<"init fail"<<endl;
        return 0;
    }
    q.f=q.r=0;
    cout<<"initqueue succeed"<<endl;
    return 1;
}

int inqueue(sqqueue &q,int e)
{
    if((q.r+1)%MAXQSIZE==q.f)
    {
        cout<<"inqueue fail"<<endl;
        return 0;
    }
    q.base[q.r]=e;
    q.r=(q.r+1)%MAXQSIZE;
    cout<<"inqueue succeed"<<endl;
}

int dequeue(sqqueue &q,int &e)
{
    if(q.f==q.r)
    {
        cout<<"dequeue fail"<<endl;
        return 0;
    }
    e=q.base[q.f];
    q.f=(q.f+1)%MAXQSIZE;
    cout<<"dequeue succeed"<<endl;
    return 1;
}

int gethead(sqqueue &q)
{
    if(q.f!=q.r)
    {
        cout<<"gethead succeed"<<endl;
        cout<<"the sqqueue elem is "<<q.base[q.f]<<endl;
        return 1;
    }
}







int initstack(sqstack &s)
{
    s.base=new int[MAXSIZE];
    if(!s.base)
    {
        cout<<"init fail"<<endl;
        return 0;
    }
    s.top=s.base;
    s.stacksize=MAXSIZE;
    cout<<"initstack succeed"<<endl;
    return 1;
}

int push(sqstack &s,int e)
{
    if(s.top-s.base==s.stacksize)
    {
        cout<<"push fail"<<endl;
    }
    *s.top++=e;
    cout<<"push succeed"<<endl;
    return 1;
}

int pop(sqstack &s,int e)
{
    if(s.top==s.base)
    {
        cout<<"pop fail"<<endl;
    }
    e=*--s.top;
    cout<<"pop succeed"<<endl;
    return 1;
}

int gettop(sqstack &s)
{
    if(s.top!=s.base)
    {
        cout<<"gettop succeed"<<endl;
        cout<<"the stack elem is "<<*(s.top-1)<<endl;
        return 1;
    }
    cout<<"gettop fail"<<endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值