队列(有头结点)
#include<iostream>
using namespace std;
typedef struct node
{
int data;
struct node *next;
}node,*point;
typedef struct
{
point front,rear;
}listqueue;
listqueue Q;
bool empty(listqueue Q)//判队空
{
return (Q.front==Q.rear);
}
void initq(listqueue &Q) //初始化,构造一个空队列
{
Q.front=Q.rear=new node;
if(!Q.front)
{
cout<<"error! init error\n";
}
Q.front->next=NULL;
}
void enqueue(listqueue &Q)//入队
{
point p;
int x;
while(cin>>x&&x)
{
p=new node;
p->data=x;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}
}
void outqueue(listqueue &Q) //出队
{
if(empty(Q))
{
cout<<"ERROR! The queue is empty"<<endl;
return;
}
point p,q;
p=Q.front->next;
while(p)
{
q=p;
cout<<p->data<<" ";
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
p=p->next;
free(q);
}
cout<<endl;
}
int lengh(listqueue Q)
{
point p;
int n=0;
p=Q.front->next;
while(p)
{
n++;
p=p->next;
}
return n;
}
int main()
{
initq(Q);
enqueue(Q);
cout<<lengh(Q)<<endl<<endl;
outqueue(Q);
return 0;
}