您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)中鏈隊(duì)列的基本操作是怎樣的,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
隊(duì)列 (Queue)是另一種限定性的線性表,它只允許在表的一端插入元素,而在另一端刪除元素,所以隊(duì)列具有先進(jìn)先出(Fist In Fist Out,縮寫(xiě)為FIFO)的特性。在隊(duì)列中,允許插入的一端叫做隊(duì)尾(rear),允許刪除的一端則稱為隊(duì)頭(front)。 假設(shè)隊(duì)列為q=(a1,a2,…,an),那么a1就是隊(duì)頭元素,an則是隊(duì)尾元素。隊(duì)列中的元素是按照a1、a2、…、an的順序進(jìn)入的, 退出隊(duì)列也必須按照同樣的次序依次出隊(duì),也就是說(shuō),只有在a1、a2、…、an-1都離開(kāi)隊(duì)列之后,an才能退出隊(duì)列。
鏈隊(duì)列可以定義如下:
#define TRUE 1 #define FALSE 0 typedef struct QNode{ QElemType data; struct QNode *next; }QNode, *QueuePtr; typedef struct{ QueuePtr front; QueuePtr rear; }LinkQueue;
Status InitQueue(LinkQueue &Q) { Q.front = Q.rear = (Queueptr) malloc(sizeof(QNode)); if(!Q.front) exit ( OVERFLOW); Q.front ->next = NULL; return OK; }
Status DestroyQueue(LinkQueue &Q) { while(Q.front) { Q.rear = Q.front->next; free (Q.front); Q.front = Q.rear; } return OK; }
Status EnQueue (LinkQueue &Q, QelemType e) { p= (QueuePtr) malloc(sizeof(QNode)); if (!p) exit ( OVERFLOW); p->data = e; p->next = NULL; Q.rear -> next =p; Q.rear = p; return OK; }
Status DeQueue (LinkQueue &Q, QelemType &e) { if ( Q.front == Q.rear) return ERROR; p=Q.front->next; e=p->data; Q.front->next =p->next; if (Q.rear == p) Q.rear = Q.front; free(p); return OK; }
#include<iostream> using namespace std; #define OK 1 #define FALSE 0 typedef int QElemType; typedef int Status; typedef struct QNode{ QElemType data; struct QNode *next; }QNode,*QueuePtr; typedef struct{ QueuePtr font; QueuePtr near; }LinkQueue; Status InitQueue(LinkQueue &Q) { Q.font=(QueuePtr)malloc(sizeof(QNode)); if(!Q.font) exit(FALSE); Q.font->next=NULL; Q.near=Q.font; return OK; } Status QueueEmpty(LinkQueue Q) { if(Q.font->next) return OK; return FALSE; } Status EnQueue(LinkQueue &Q,QElemType e) { QueuePtr p=(QueuePtr)malloc(sizeof(QNode)); p->data=e; Q.near->next = p; Q.near = Q.near->next; p->next = NULL; return OK; } Status DeQueue(LinkQueue &Q,QElemType &e) { if(!Q.font->next) return FALSE; QueuePtr p; p=Q.font->next; e=p->data; Q.font->next=p->next; if(Q.near==p) Q.near=Q.font; //當(dāng)是最后一個(gè)元素時(shí),Q.font=NULL,Q.near=Q.font free(p); return OK; } Status ClearQueue(LinkQueue &Q) { QueuePtr p; p=Q.font->next; QueuePtr q; while(p) { q=p; p=p->next; Q.font->next=p; free(q); } Q.near=Q.font; return OK; } void menu() { cout<<"初始化隊(duì)列:1"<<endl; cout<<"入隊(duì):2"<<endl; cout<<"出隊(duì):3"<<endl; cout<<"清空隊(duì)列:4"<<endl; cout<<"退出:5"<<endl; } int main() { LinkQueue Q; while(true) { int n; menu(); scanf("%d",&n); int e=-1; switch(n) { case 1: InitQueue(Q); continue; case 2: printf("請(qǐng)輸入一個(gè)元素"); scanf("%d",&e); EnQueue(Q,e); continue; case 3: DeQueue(Q,e); printf("\n出隊(duì)元素%d\n",e); continue; case 4: ClearQueue(Q); printf("清空成功\n"); continue; default: break; } if(n==5)break; } }
關(guān)于C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)中鏈隊(duì)列的基本操作是怎樣的就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。