資料結構(C語言版) 佇列

2021-10-05 07:31:22 字數 2645 閱讀 3317

1、佇列:在表的一端插入,表的另一端刪除,允許插入的一端為隊尾,允許刪除的一端為隊頭。先進先出fifo。

2、佇列的基本操作

initqueue(&q):構造空佇列

destroyqueue(&q):銷毀佇列

clearqueue(&q):清空佇列

queueempty(q):判斷佇列是否為空

queuelength(q):求佇列長度

gethead(q,&e):用e返回佇列的隊頭元素

enqueue(&q,e):插入e作為佇列的新隊尾

dequeue(&q,&e):刪除隊頭元素,並用e返回

1)迴圈佇列:將順序佇列變成環狀空間。

(1)初始化建空佇列時:front=rear=0

(2)每當插入新的佇列尾元素時,rear=(rear+1)%maxsize

(3)每當刪除隊頭元素時,front=(front+1)%naxsize

(4)在非空佇列中,頭指標始終指向佇列頭元素,而尾指標始終指向佇列尾元素的下乙個位置。

(5)佇列長度:(rear+maxsize-front)%maxsize

2)判別佇列空間是「空」還是「滿」。

(1)設乙個標誌位tag以區別佇列是「空」還是「滿」,初始tag=0,入隊成功tag=1,出隊成功tag=0。

隊空:因刪除元素導致rear==front&&tag==0;隊滿:因插入元素導致rear==front&&tag==1

(2)少用乙個元素空間,約定以「佇列頭指標在佇列尾指標的下乙個位置(指環狀的下乙個位置)上」作為佇列「滿」的標誌。

隊空:rear==front;隊滿:(rear+1)%maxsize==front;隊中元素的個數:(rear+maxsize-front)%maxsize

(3)設定計數器count,初始count=0,入隊成功count+1,出隊成功count-1。

隊空:count==0;隊滿:count>0&&rear==front

3)佇列的順序儲存型別描述

#define maxsize 50

typedef struct sqqueue;

初始狀態(隊空條件):q.front==q.rear==0;進隊操作:隊不滿時,插入隊尾,隊尾指標+1;出隊操作:隊不空時,取隊頭元素的值,頭指標+1。

4)順序儲存時一些基本操作的實現

(1)初始化

void initqueue(sqqueue &q)

(2)判斷隊列為空

bool queueempty(sqqueue q)

else

}(3)入隊

bool enqueue(sqqueue & q,int e)

q.data[q.rear] = e;

q.rear = (q.rear + 1) % maxsize;

return true;

}(4)設有tag標誌的迴圈隊列入隊

bool enqueue2(sqqueue & q, int e)

q.data[q.rear] = e;

q.rear = (q.rear + 1) % maxsize;

q.tag = 1;

return true;

}(5)出隊

bool dequeue(sqqueue &q, int &e)

e = q.data[q.front];

q.front = (q.front + 1) % maxsize;

return true;

}(6)設有tag標誌的迴圈佇列出隊

bool dequeue2(sqqueue &q, int &e)

e = q.data[q.front];

q.front = (q.front + 1) % maxsize;

q.tag = 0;

return true;

}4、雙端佇列:限定插入和刪除操作在表的兩端進行的線性表。

1)輸出受限的雙端佇列:乙個端點允許插入和刪除,另乙個端點只允許插入。

2)輸入受限的雙端佇列:乙個端點允許插入和刪除,另乙個端點只允許刪除。

5、佇列的鏈式儲存

1)鏈佇列:用鍊錶表示的佇列,乙個含有頭指標(指向隊頭結點)和尾指標(指向隊尾結點)的單鏈表。

2)當鍊佇列有頭結點時,當尾指標和頭指標均指向頭結點,則鏈佇列尾空。

3)佇列的鏈式儲存型別描述

typedef struct linkqueuenode;

typedef struct linkqueue;

鏈式隊列為空。

4)鏈式儲存時一些基本操作的實現

(1)初始化

void initqueue(linkqueue &q)

(2)判斷佇列是否為空

bool queueempty(linkqueue q)

else

}(3)入隊

void enqueue(linkqueue &q, int e)

(4)出隊

bool dequeue(linkqueue &q, int &e)

linkqueuenode *p = q.front;

e = p->data;

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

if (q.rear == p)

free(p);

return true;

}

資料結構之佇列 c語言版

佇列 queue 在邏輯上是一種線性儲存結構。它有以下幾個特點 1 佇列中資料是按照 先進先出 fifo,first in first out 方式進出佇列的。2 佇列只允許在 隊首 進行刪除操作,而在 隊尾 進行插入操作。佇列通常包括的兩種操作 入佇列 和 出佇列。底層可以由陣列 順序表 鍊錶實現...

資料結構之佇列(C語言版)

佇列的鏈式儲存結構 總結佇列 是只允許在一端進行插入操作,而在另一端進行刪除操作。可以是表頭,也可以是表尾 我們可以看到,佇列其實也是線性表的一種,佇列的意思其實就和他的名字一樣,他的儲存特點就像乙個一堆資料排隊一樣,先排到隊裡面的資料就先出來 first in first out 簡稱fifo。允...

資料結構(C語言版)

用棧實現數字的進製轉換 10轉8 棧 限定只能在表尾進行插入或者刪除操作的線性表 特點 先進後出 儲存表示方法 順序棧和鏈棧 本文用的順序棧 實現 readonly name code class c include include define stack init size 100 儲存空間初始...