資料結構(C語言) 鏈佇列基本操作

2021-10-24 23:28:35 字數 2100 閱讀 9944

文章首發於2020-10-15 知乎文章:資料結構(c語言)-鏈佇列基本操作

佇列是一種先進先出(first in first out,fifo)的線性表,是一種常用的資料結構。

它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列中沒有元素時,稱為空佇列。

佇列結構

佇列有很多種,按照儲存結構劃分,有鏈式佇列,迴圈佇列,單向佇列,雙端佇列

實現佇列的方式也有很多種,如基於鏈式儲存結構的鏈結佇列(又稱鏈佇列),基於順序儲存結構的佇列

本文介紹鏈佇列的實現和一些基本操作,並用**的形式講解

乙個鏈佇列需要兩個指標才能唯一確定,它們分別指示隊頭和隊尾(分別稱為頭指標和尾指標)

與線性表的單鏈表一樣,為了操作方便起見, 給鏈佇列新增乙個頭結點,並令頭指標指向頭結點

空的鏈佇列的判別條件為頭指標和尾指標均指向頭結點

圖2 佇列的鏈式儲存結構(鏈佇列)

以下**實現了乙個可以儲存學生學號(最長12位的字串)鏈佇列,實現了它的初始化,出隊,入隊,佇列銷毀的操作:

#include#include#include#define ok 1

#define no 0

//ok和no是自定義的狀態變數

//鏈佇列結點

typedef struct qnodeqnode;

//鏈佇列

typedef structlinkqueue;

//初始化佇列函式

int initqueue(linkqueue* q)

//插入元素,成為新的隊尾元素

int insertqueue(linkqueue* q)

//元素出隊

char* outqueue(linkqueue* q)

//若佇列不空,則讓佇列頭部元素出隊

qnode* p = q->front->next;

char* data_return = p->data;

q->front->next = p->next;

//如果只有乙個元素,該元素出隊後,頭尾指標都指向null。此時應該重置頭尾指標指向,相當於重置鏈佇列

if(q->rear==p) q->rear = q->front;

//如果不止乙個元素,就不用重置尾指標位置

free(p);//**記憶體

return data_return;

} //銷毀佇列

int destroyqueue(linkqueue* q)

return ok;

}//返回佇列長度,用於計算還剩多少個元素結點在佇列裡

int queuelenth(linkqueue* q)

return count;

} //主函式

int main()

break;

case 3:

back = outqueue(&q);

back? printf("------------\n 元素: %s 出隊,還剩%d個元素\n",back,queuelenth(&q)):printf("------------\n隊列為空,無法出隊!\n"); ;

break;

case 4:

destroyqueue(&q)?printf("------------\n佇列銷毀成功!\n"):printf("------------\n佇列銷毀失敗!\n");

break;

case 0:

printf("\n-->> 退出\n");

exit(0);

break;

default:

break;

}}while(choice);

}

主函式裡主要是考慮到使用者互動和視覺效果,所以有很多printf函式用來打分割符。

資料結構 鏈佇列基本操作

include 鏈佇列的基本操作,首先我們要知道佇列是在隊頭進行刪除,隊尾進行插入 include includetypedef struct sq sq typedef struct squeue 到此,佇列的資料結構型別定義完畢 void init squeue squeue p 佇列的初始化 ...

C語言資料結構 鏈佇列

鏈佇列與鍊錶相似,不同的是它具有對列的運算方法,儲存結構和鍊錶相同,下面是其結構示意圖 這裡的 q類似於鍊錶的頭節點 head 它包含兩個指向佇列節點的指標front和rear 當front和rear都為 時隊列為空 front指向佇列第乙個節點,rear指向最後乙個節點,當兩者指向同乙個節點說明佇...

資料結構 C語言 迴圈佇列基本操作

文章首發於 2020 10 15 知乎文章 資料結構 c語言 迴圈佇列基本操作 佇列是一種先進先出 first in first out,fifo 的線性表,是一種常用的資料結構。它只允許在表的前端 front 進行刪除操作,而在表的後端 rear 進行插入操作,和棧一樣,佇列是一種操作受限制的線性...