队列——链表描述
为了方便出队操作,建立队列的时候,队列的方向和队列里元素的方向连接相反
#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;
}