问题: 跟之前想的不一样,以为就是个链表,结果实现时就出问题了。
lqueue->rear要不断的后移***因此,每次入队的时候要找到lqueue->rear,因此每次入队是要后移lqueue->rear。^^
代码:
#include <iostream>
#include <cstdlib>
using namespace std;
typedef struct LinkQueue
{
int data;
struct LinkQueue *front;
struct LinkQueue *rear;
}*LQueue;
void initLQueue(LQueue &lqueue)
{
lqueue=(LQueue)malloc(sizeof(struct LinkQueue));
if(!lqueue)
{
cout<<"allocate fail"<<endl;
exit(-1);
}
else
{
lqueue->front=lqueue->rear=NULL;
}
}
void enQueue(LQueue lqueue,int elem) //入队
{
LQueue node,temp;
node=(LQueue)malloc(sizeof(struct LinkQueue));
if(!node)
{
cout<<"allocate fail"<<endl;
exit(-1);
}
else
{
node->data=elem;
node->front=node->rear=NULL;
if(lqueue->front==NULL)
{
temp=lqueue;
temp->front=node;
temp->rear=node;
}
else
{
temp=lqueue->rear;
temp->rear=node;
lqueue->rear=node;
}
}
}
int deQueue(LQueue lqueue)
{
LQueue p;
int elem;
if(lqueue->front!=NULL)
{
if(lqueue->front->rear!=NULL)
{
p=lqueue->front;
lqueue->front=p->rear;
elem=p->data;
free(p);
}
else
{
p=lqueue->front;
elem=p->data;
lqueue->front=lqueue->rear=NULL;
free(p);
}
return elem;
}
return 0;
}
int GetHead(LQueue lqueue)
{
int elem;
if(lqueue->front!=NULL)
{
elem=lqueue->front->data;
return elem;
}
return 0;
}
int main()
{
LQueue lqueue;
int arr[]={9,3,21,11,70,13,8,2,6};
initLQueue(lqueue);
for(int i=0;i<9;i++)
{
enQueue(lqueue,arr[i]);
}
cout<<"队头元素是 "<<GetHead(lqueue)<<endl;
while(lqueue->front!=NULL)
{
cout<<deQueue(lqueue)<<" | ";
}
cout<<endl;
return 0;
}
运行结果: