您好,登錄后才能下訂單哦!
由于線性存儲(chǔ)結(jié)構(gòu)有順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ)兩種,而隊(duì)列是一種特殊的線性結(jié)構(gòu),所以,隊(duì)列自然也會(huì)有鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),這種存儲(chǔ)結(jié)構(gòu),稱之為“鏈隊(duì)列”。只不過(guò),這種結(jié)構(gòu)需要兩個(gè)指針,一個(gè)指針指向隊(duì)列的頭部,一個(gè)指針指向隊(duì)列的尾部。雖然隊(duì)列采用了鏈?zhǔn)酱鎯?chǔ)這種方式,但是它本質(zhì)上仍然是隊(duì)列,因此,只要是隊(duì)列,就要遵循:只允許在隊(duì)列的頭部進(jìn)行刪除操作,只允許在隊(duì)里的尾部進(jìn)行插入操作。那么,先來(lái)定義個(gè)鏈隊(duì)列結(jié)構(gòu):
typedef int QElemType; typedef struct QNode{ QElemType data; struct QNode *next; }QNode, *QueuePtr; typedef struct{ QueuePtr front, rear; }LinkQueue;
有了隊(duì)列這種結(jié)構(gòu)后,就可以進(jìn)行隊(duì)列元素的插入操作了。
Status EnQueue ( LinkQueue *Q, QElemType e ){ QueuePtr s = ( QueuePtr ) malloc ( sizeof ( struct QNode ) ); if ( !s ) exit ( OVERFLOW ); s->data = e; s->next = NULL; Q->rear->next = s; Q->rear = s; return OK; }
同樣的,元素的刪除操作。
Status DeQueue ( LinkQueue *Q, QElemType *e ){ QueuePtr p; 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; }
免責(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)容。