安徽服飾網(wǎng)站建設(shè)萬網(wǎng)域名官網(wǎng)
在一個(gè)循環(huán)鏈隊(duì)中只有尾指針(記為rear,結(jié)點(diǎn)結(jié)構(gòu)為數(shù)據(jù)域data,指針域next),請(qǐng)給出這種隊(duì)列的入隊(duì)和出隊(duì)操作實(shí)現(xiàn)過程
入隊(duì)過程如下圖:
先創(chuàng)一個(gè)結(jié)點(diǎn),用于存儲(chǔ)要插入的結(jié)點(diǎn)數(shù)據(jù)
然后就是老套路了:先連后斷
void EnQueue(LinkQueue* Q,int x){QueuePtr s=(QueuePtr)malloc(sizeof(QNode));//malloc申請(qǐng)一個(gè)QNode結(jié)點(diǎn)大小的空間,然后用指針s指向它s->data=x;//把x值賦到結(jié)點(diǎn)里面if(Q->rear==NULL){//隊(duì)列為空,新加入的s結(jié)點(diǎn)成為唯一結(jié)點(diǎn)Q->rear=s;Q->rear->rear=Q->rear;//唯一一個(gè)結(jié)點(diǎn)就自己指向自己形成一個(gè)環(huán)}else{s->next=Q->rear->next;//先連:s的next指向rear的next(也就是頭結(jié)點(diǎn))Q->rear->next=s;//后斷,當(dāng)前rear的next指向sQ->rear=s;//s成為新的rear}}
出隊(duì)過程如下圖:
void DeQueue(LinkQueue* Q){QueuePtr p;if(Q->rear==NULL){//空隊(duì)列,沒辦法出隊(duì)printf("隊(duì)列為空,無法出隊(duì)");return;}if(Q->rear->next==Q->rear){//隊(duì)列中只有一個(gè)元素p=Q->rear;//用p記錄rear位置,再free掉free(p);Q->rear=NULL;//最后rear置空}else{//隊(duì)列還有一些元素p=Q->rear->next;//通過rear找到頭結(jié)點(diǎn)賦給pQ->rear->next=p->next;//rear連上頭結(jié)點(diǎn)下一個(gè)結(jié)點(diǎn)free(p);//把p釋放掉}
}