隊列——鏈表描述
爲了方便出隊操作,建立隊列的時候,隊列的方向和隊列裏元素的方向連接相反
#include <iostream>
using namespace std;
struct node //定義一個結構體,它是隊列裏的元素
{
int x;
node* next;
};
class queue
{
public:
queue():size(0) //構造函數初始化隊列裏元素的個數爲0,並new一個節點
{
front=rear=new node;
}
~queue(); //析構函數刪除隊列
int dequeue(); //出隊
void enqueue(int n); //進對
private:
node *front; //隊列頭指針
node *rear; //隊列尾指針
int size; //隊列裏元素的個數
};
queue::~queue()
{
node *p=front;
while(p!=NULL)
{
front=front->next; //從front刪除元素
delete [] p;
p=front;
}
}
void queue::enqueue(int n) //入隊操作,增加一個元素放在隊尾
{
node* temp=new node; //定義一個臨時指針
if(size==0) //如果size=0,表示隊列沒有元素,但構造函數new了一個node節點,所以直接把它當作第一個節點,此時,front和rear都指向它
{
rear->x=n;
rear->next=NULL;
//rear=temp; //這裏不知道爲什麼這樣不行,直接把temp賦值給rear,可能rear->next出問題
}
else //size不爲0,往尾巴上續
{
temp->x=n;
rear->next=temp;
temp->next=NULL;
rear=temp;
}
size++; //棧裏元素個數加1
}
int queue::dequeue() //出對操作,返回出隊元素值,並刪除該元素
{
node* temp; //定義一個臨時node指針
int out; //返回值
if(size) //用size判斷是否棧裏還有元素
{
temp=front;
front=temp->next;
out=temp->x;
delete []temp;
size--;
return out;
}
else
{
cout<<"隊列已經爲空!"<<endl;
exit(0);
}
}
int main()
{
queue que;
cout<<"The enqueue of que are: ";
for(int i=1;i<=20;i++)
{
cout<<i<<" ";
que.enqueue(i);
}
cout<<endl;
cout<<"The dequeue of que are: ";
for(i=1;i<=10;i++)
cout<<que.dequeue()<<" ";
cout<<endl;
return 0;
}