队列-课前预习

1

错误

2

m

3

#include <bits/stdc++.h>
using namespace std;
const int M = 100;
int a[100],l=0,cnt=0;
bool push(int x){
  if(cnt>=M)return false;
  else a[(l+cnt++)%M]=x;
  return true;
}
int pop(){
  if(cnt<= 0)return INT32_MIN;
  else return a[l+(--cnt)];
}
void show(){
  cout<<"队列为:";
  for(int i=0;i<cnt;++i)
    cout<<a[(l+i)%M]<<' ';
  cout<<endl;
}
​
int main(){
  int op, p;
  while(cin>>op && op!=-1){
    cout<<"请选择您所需的操作:\n1.入队\n2.出队\n-1.退出"<<endl;
    int x;
    switch (op){
      case 1:
        cin>>x;
        push(x);
        show();
        break;
      case 2:
        p=pop();
        if(p==INT32_MIN)cout<<"队列为空"<<endl;
        else cout<<"出队的元素为:"<<pop()<<endl;
        break;
    }
  }
  return 0;
}

4

#include <bits/stdc++.h>
using namespace std;
class mydeque{
  private:
    int l,r,cnt;
    int *p;
  public:
    static int maxn;
    mydeque():l(0),r(1),cnt(0){p = new int[maxn];};
    ~mydeque(){ delete p;}
    bool push(int x);
    int pop();
    bool inject(int x);
    int eject();
    bool is_full(){return cnt==maxn;};
    bool is_empty(){return cnt==0;};
    void show();
};
int mydeque::maxn = 100;
​
bool mydeque::push(int x){
  if(is_full()) return false;
  else {
    int maxnn=mydeque::maxn;
    p[l] = x;
    l=(l-1+maxnn)%maxnn;
    cnt++;
  }
}
​
int mydeque::pop(){
  if(is_empty()) return INT32_MIN;
  else {
    l=(l+1)%mydeque::maxn;
    cnt--;
    return p[l];
  }
}
​
bool mydeque::inject(int x){
  if(is_full()) return false;
  else {
    p[r]=x;
    r=(r+1)%mydeque::maxn;
    cnt++;
  }
}
​
int mydeque::eject(){
  if(is_empty()) return INT32_MIN;
  else {
    int maxnn=mydeque::maxn;
    r=(r-1+maxnn)%maxnn;
    cnt--;
    return p[r];
  }
}
​
void mydeque::show(){
  cout<<"当前队列中的元素: ";
  for(int i=1;i<=cnt;++i)
    cout<<p[(l+i)%mydeque::maxn]<<" ";
  cout<<endl;
}
​
int main(){
  mydeque dq;
  cout<<"请输入操作:\n1.队头入队\t2.队头出队\t3.队尾入队\t4.队尾出队\t-1.结束\n";
  int op;
  while(cin>>op && op!=-1){
    int x, tmp;
    switch(op){
      case 1:
        cin>>x;
        dq.push(x);
        dq.show();
        break;
      case 2:
        tmp=dq.pop();
        if(tmp==INT32_MIN) cout<<"队列为空\n";
        else cout<<"出队元素为"<<tmp<<endl;
        break;
      case 3:
        cin>>x;
        dq.inject(x);
        dq.show();
        break;
      case 4:
        tmp=dq.eject();
        if(tmp==INT32_MIN) cout<<"队列为空\n";
        else cout<<"出队元素为"<<tmp<<endl;
        break;
    }
  }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值