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是把元素從隊頭刪除。佇列的陣列實現...