佇列(陣列實現和鍊錶實現)

2021-09-30 14:25:35 字數 2918 閱讀 5367

1.概念:具有一定操作約束的線性表

2.特點:(1)只能在一端插入(入隊),另一端刪除(出隊)。

(2).先進先出。

3.儲存實現方式:陣列、鍊錶。

4.基本操作:

1.陣列實現(迴圈陣列):

注意:(1)、普通的順序儲存的陣列用來實現佇列時,存在乙個問題:當rear(記錄隊尾的變數)到達maxsize-1時,不能確定佇列是否滿,因為前面可能刪除了一些元素(front(記錄對頭的變數)可能已經增加了),所以用迴圈陣列來實現佇列的操作

(2)、對於迴圈陣列,無論是空佇列還是滿佇列,front與rear都相等,所以,引入了乙個變數size來記錄佇列中元素的個數。

基本操作:

(1)、佇列結構體定義:

typedef

struct queue

q;

(2)、建立空佇列:

q *makeempty(q *q)//建立空佇列 

(3)、判斷佇列是否空,是否滿:

int isempty(q *q)//判斷佇列是否為空 

int isfull(q *q)//判斷佇列是否滿

(4)、入佇列和出佇列:

void addq(q *q,int num)//入佇列 

else

(q->size)++;

q->data[(++(q->rear)%maxsize)] = num;

//先將rear+1,再對maxsize取餘得到下標

return ;

}int deleteq(q *q)//出佇列

else

}

(5)、陣列實現佇列的完整**:

#include 

#define maxsize 10

#include

typedef

struct queue

q;int isempty(q *q)//判斷佇列是否為空

int isfull(q *q)//判斷佇列是否滿

q *makeempty(q *q)//建立空佇列

void addq(q *q,int num)//入佇列

else

(q->size)++;

q->data[(++(q->rear)%maxsize)] = num;//先將rear+1,再對maxsize取餘得到下標

return ;

}int deleteq(q *q)

else

}int main()

n = isempty(q);

printf("x%d\t",n);

for(int i = 0;i < 2;i++)

free(q);

return

0;

}

輸出結果:

2.鍊錶實現佇列:

注意:由於鍊錶的尾不能進行刪除操作,所以front指向鍊錶的頭,rear指向鍊錶的尾。

(1)、 結構體的定義:

typedef

struct node

qnode;

typedef

struct

q;

(2)、核心**:增添和刪除結點資訊

void addq(q *q,int num)

//增添結點

else

}

int deleteq(q *q)

//刪除結點並返回刪除結點的值

temp = q->front;//保留頭結點

if(q->front == q->rear)//若佇列只有乙個元素

q->front = q->rear =

null;//將頭結點尾結點都設為空

else

q->front = q->front->next;//否則改變頭結點

term = temp->

data;

free(temp);//釋放頭結點

return term;//返回頭結點的值

}

(3)、完整**:

#include

#include

typedef struct node

qnode;

typedef struct

q;int deleteq(q *q)//刪除結點並返回刪除結點的值

temp = q->front;//保留頭結點

if(q->front == q->rear)//若佇列只有乙個元素

q->front = q->rear =

null;//將頭結點尾結點都設為空

else

q->front = q->front->next;//否則改變頭結點

term = temp->

data;

free(temp);//釋放頭結點

return term;//返回頭結點的值

}void addq(q *q,int num)//增添結點

else

} int main()

for(int i =

0;i<

2;i++)

free(q);

return

0;}

執行結果:

佇列的陣列和鍊錶實現

1.佇列是先入先出額資料結構,它的實現可以用陣列,也可以用鍊錶。用陣列實現鍊錶時,需要預先分配陣列的大小,用front和rear下標分別表示隊頭元素下標和隊尾元素下標,插入乙個元素時,使隊尾的下標rear加1,刪除乙個元素時,front下標加1,判斷是否為空的佇列只要判斷front和rear是否相等...

陣列和鍊錶實現佇列的比較

定義的介面 其中e為泛型,用來定義具體操作的是什麼型別 可以是乙個類也可以是基本資料型別 用包裝類實現 public inte ce iarray public void add e e 新建陣列的最後乙個記憶體單元用來存放新增加的資料 obb obb.length 1 e ob obb publi...

佇列的陣列實現與鍊錶實現

佇列是一種基本的資料結構。我們平時排隊等候服務的時候,是先到的人先接受服務。對於佇列這種資料結構,實現的就是一種先進先出 first int,first out,fifo 的策略。改變佇列中元素的操作方法只有兩個 push與pop。push是把元素從隊尾插入,pop是把元素從隊頭刪除。佇列的陣列實現...