果用一个循环单链表表示队列(称为循环队列),该队列只设一个尾指针rear,不设队首指针,编写程序。

如题所述

第1个回答  2013-11-29
C++的实现方式: #include<iostream>
using namespace std;template<class entry>
class Node{
public:
entry x;
Node<entry>*next;
};template<class entry>
class Loop_Queue{
public:
Loop_Queue(){
rear=NULL;
count=0;
} ~Loop_Queue(){
clear();
} bool append(const entry&item){
Node<entry>*new_node=new Node<entry>;
if(!new_node)
return false;
new_node->x=item;
if(count==0){
rear=new_node;
rear->next=rear;
}
else if(count==1){
rear->next=new_node;
new_node->next=rear;
rear=new_node;
}
else{
Node<entry>*temp_node;
temp_node=rear->next;
rear->next=new_node;
rear=new_node;
rear->next=temp_node;
}
count++;
return true;
} bool serve(){
if(!count)
return false;
Node<entry>*temp_node_1=rear->next;
Node<entry>*temp_node_2=temp_node_1->next;
delete temp_node_1;
count--;
if(count)
rear->next=temp_node_2;
else
rear=NULL;
return true;
} void retrieve(entry&item){
Node<entry>*temp_node=rear->next;
item=temp_node->x;
} bool empty()const{
return count==0;
} void clear(){
while(count)
serve();
} int size()const{
return count;
}
private:
Node<entry>*rear;
int count;
};void main()
{
Loop_Queue<int>q;
int i;
for(i=1;i<=10;i++){
if(q.append(i)){}
else
cout<<"警告:申请储存空间失败!"<<endl;
}
for(i=0;i<10;){
q.retrieve(i);
q.serve();
cout<<i<<endl;
}
}
PS:附了一个实例验证,如果LZ不理解的话请跟贴,我会详细说明的。本回答被网友采纳
相似回答