1. 程式人生 > 實用技巧 >基於迴圈連結串列的佇列的基本操作

基於迴圈連結串列的佇列的基本操作

描述

用帶頭結點的迴圈連結串列表示佇列,並且只設一個指標指向隊尾元素結點(不設頭指標)。實現該佇列的入隊出隊以及判斷佇列是否為空操作。

輸入

多組資料,每組資料有兩行。第一行為兩個整數n和m,n表示入隊序列A的長度(n個數依次連續入隊,中間沒有出隊的情況),m表示出隊序列B的元素數量(m個數依次連續出隊,中間沒有入隊的情況)。第二行為序列A(空格分隔的n個整數)。當n和m都等於0時,輸入結束。

輸出

對應每組資料輸出一行。每行包括m+1個整數,前m個數代表出隊序列B的各個整數,最後一個整數表示佇列是否為空,佇列為空輸出0,不為空輸出1。整數之間用空格分隔。

輸入樣例 1

5 3
1 3 5 3 6
4 4
-1 2 3 4
0 0

輸出樣例 1

1 3 5 1
-1 2 3 4 0

#include<iostream>
using namespace std;

typedef struct QNode{
    int data;
    struct QNode *next;
}QNode,* QueuePtr;

typedef struct {
    QueuePtr rear;
    QueuePtr front;
}LinkQueue;

void Init(LinkQueue &Q){
    Q.front=Q.rear=new QNode;
    Q.front
->next=NULL; } void Push(LinkQueue &Q,int e){ QueuePtr p=new QNode; p->data=e; p->next=NULL; Q.rear->next=p; Q.rear=p; } void Pop(LinkQueue &Q){ QueuePtr p=Q.front->next; cout<<p->data<<' '; Q.front->next=p->next; if(Q.rear==p) Q.rear
=Q.front; delete p; } void Judge(LinkQueue Q){ if(Q.front==Q.rear) cout<<"0"<<endl; else cout<<"1"<<endl; } int main(){ while(1){ int n,m; cin>>n>>m; if(m==0&&n==0) return 0; LinkQueue Q; Init(Q); for(int i=0;i<n;i++){ int e; cin>>e; Push(Q,e); } for(int i=0;i<m;i++){ Pop(Q); } Judge(Q); } }