資料結構 佇列04

2021-09-20 18:45:24 字數 2950 閱讀 6518

佇列是限制在兩端進行插入操作和刪除操作的線性表,允許進行存入操作的一端稱為「隊尾」,允許進行刪除操作的一端稱為「隊頭」。當線性表中沒有元素時,稱為「空隊」。特點 :先進先出(fifo)。

佇列的特徵:

特殊的線性表,先進先出(fifo)。

1)資料:

對於非空的佇列,表頭沒有直接前驅,表尾沒有直接後繼,其它有且僅有乙個直接前驅和乙個直接後繼。

2)操作:

只允許在表尾插入資料,在表頭刪除資料

順序佇列

typedef int datatype ;	    /*定義佇列中資料元素的資料型別*/

#define maxsize 64 /*定義佇列的容量*/

typedef struct

sequeue ; /*順序佇列型別定義*/

sequeue *sq ; /*定義指向順序佇列的指標*/

初始化

演算法思路:

首先使用malloc()函式申請記憶體,申請成功後,設定隊頭和隊尾。

void init_seqqueue(seq_pqueue *q)

(*q)->front=(*q)->rear=maxsize-1;

return;

}

判斷是否為空

演算法思路:當隊頭和隊尾指標在同一位置時,隊空。q->rear == q->front)

bool is_empty_seqqueue(seq_pqueue q)

判斷是否為滿

演算法思路:隊頭指標在隊尾指標的下一位置時,隊滿 因為隊頭指標可能又重新從0位置開始,而此時隊尾指標是maxsize - 1,所以需要求餘;少用乙個儲存空間,也就是陣列的最後乙個存數空間不用

bool is_full_seqqueue(seq_pqueue q)

入隊
bool in_seqqueue(datatype data,seq_pqueue q)

//入對

q->rear=(q->rear+1)%maxsize;

q->data[q->rear]=data;

return true;

}

出隊
bool out_seqqueue(seq_pqueue q,datatype *d)

//出隊

q->front=(q->front+1)%maxsize;

*d=q->data[q->front];

return true;

}

遍歷佇列
void show_seqqueue(seq_pqueue q)

printf("\n");

}

test

/* 用迴圈佇列實現如下功能:

* 使用者從鍵盤輸入整數,程式將其入對;

* 使用者從鍵盤輸入字母,程式將隊頭元素出隊;

* 並在每一次出隊和入隊之後列印佇列元素。

*/int main(int argc, const char *ar**)

else

//清空輸入緩衝區

while(getchar()!='\n');

} }return 0;

}

鏈式佇列
typedef int datatype ;	/*定義鏈佇列中資料元素的資料型別*/

typedef struct node

linklist ; /*鍊錶元素型別定義*/

typedef struct

linqueue ; /*鏈佇列型別定義*/

linkqueue *q ; /*定義指向鏈佇列的指標*/

初始化

void init_linkqueue(link_pqueue *q)

//申請頭結點空間

(*q)->front=(linkqueue_pnode)malloc(sizeof(linkqueue_node));

if((*q)->front==null)

(*q)->front->next=null;

(*q)->rear=(*q)->front;

return;

}

判斷空
bool is_empty_linkqueue(link_pqueue q)

入隊
bool in_linkqueue(datatype data,link_pqueue q)

//將資料儲存在申請的空間

new->data=data;

//將new指向的結點插入到鏈式佇列中

new->next=q->rear->next;

q->rear->next=new;

//讓rear指標指向新的隊尾結點

q->rear=q->rear->next;

return true;

}

出隊
bool out_linkqueue(link_pqueue q,datatype *d)

//出隊

t=q->front;

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

*d=q->front->data;

free(t);

return true;

}

遍歷
void show_linkqueue(link_pqueue q)

printf("\n");

}

04 基本資料結構 佇列

一.佇列 概念 佇列是項的有序結合,其中新增新項的一端稱為隊尾,移除項的一端稱為隊首。當乙個元素從隊尾進入佇列時,一直向隊首移動,直到它成為下乙個需要移除的元素為止。最近新增的元素必須在隊尾等待。集合中存活時間最長的元素在隊首,這種排序成為 fifo,先進先出,也被成為先到先得。案例 佇列的最簡單的...

資料結構04 C語言佇列

前面三次的鏈結如下 資料結構01 單鏈表 資料結構02 雙鏈表 資料結構03 棧 本篇來說一下資料結構中的佇列。佇列是是一種先進先出 fifo 的線性表,只允許在一端進行插入 入隊 操作,在另一端進行刪除 出隊 操作。佇列中,允許入隊操作的一端叫做隊尾,允許出隊操作的一端叫做隊頭。和之前的棧一樣,c...

資料結構04

複習 1 什麼是資料結構 是專門研究資料關係和操作的學科,而非是計算方法。資料結構 演算法 程式 2 邏輯結構和物理結構 邏輯結構 集合 除了同屬於乙個集合,資料之間沒有任何關係。表 資料之間存在一對一關係。樹 資料之間存在一對多關係。圖 資料之間存在多對多關係。物理結構 順序結構 資料存在在連續的...