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 儲存空間初始...