基於迴圈連結串列的佇列的基本操作
阿新 • • 發佈:2020-11-17
描述
用帶頭結點的迴圈連結串列表示佇列,並且只設一個指標指向隊尾元素結點(不設頭指標)。實現該佇列的入隊出隊以及判斷佇列是否為空操作。
輸入
多組資料,每組資料有兩行。第一行為兩個整數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); } }