码迷,mamicode.com
首页 > 其他好文 > 详细

基于两端操作的循环队列的实现

时间:2020-11-23 12:47:48      阅读:19      评论:0      收藏:0      [点我收藏+]

标签:data-   data   队列   构造   允许   ase   没有   nbsp   入队   

描述

 

如果允许在循环队列的两端都可以进行插入和删除操作。构造一个循环队列,实现从队头入队,从队尾出队并输出。约定从队头入队时向下标小的方向发展,从队尾入队时则向下标大的方向发展。

 

输入

多组数据,每组数据有两行。第一行为一个整数n,n表示入队序列A的长度(n个数依次连续入队,中间没有出队的情况),第二行为序列A(空格分隔的n个整数)。当n等于0时,输入结束。

输出

对应每组数据输出一行。依次输出队列中所有的整数,每两个整数之间用空格分隔。

输入样例 1 

5
1 2 3 4 5
2
1 4
0

输出样例 1

1 2 3 4 5
1 4

 

最后的输出是那样是因为oj的固定要求,无特殊含义

 

#include<iostream>
using namespace std;

#define MAXSIZE 10000

typedef struct{
    int *base;
    int front;
    int rear;
}SqQueue;

int  Init(SqQueue &Q){
    Q.base=new int[MAXSIZE];
    if(!Q.base)
        return 0;
    Q.front=Q.rear=0;
    return 1;
}

int EnQueue(SqQueue &Q,int e){
    if(Q.rear==(Q.front)+1%MAXSIZE)
        return 0;
    Q.base[Q.front]=e;
    Q.front=(Q.front-1+MAXSIZE)%MAXSIZE;
    return 1;
}

int DeQueue(SqQueue &Q,int &e){
    if(Q.front==Q.rear)
        return 0;
    e=Q.base[Q.rear];
    Q.rear=(Q.rear-1+MAXSIZE)%MAXSIZE;
    return 1;
}

int main(){
    while(1){
        int n;
        cin>>n;
        if(n==0)
            return 0;
        SqQueue Q;
        Init(Q);
        for(int i=0;i<n;i++){
            int e;
            cin>>e;
            EnQueue(Q,e);
        }
        n--;
        while(n--){
            int e;
            DeQueue(Q,e);
            cout<<e<< ;
        }
        int e;
        DeQueue(Q,e);
        cout<<e<<endl;
    }
}

 

基于两端操作的循环队列的实现

标签:data-   data   队列   构造   允许   ase   没有   nbsp   入队   

原文地址:https://www.cnblogs.com/director-yu-youki/p/14005743.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!