问题: 跟之前想的不一样,以为就是个链表,结果实现时就出问题了。
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; }
运行结果: