資料結構 環形佇列 迴圈佇列 順序儲存

2021-10-10 11:14:28 字數 1905 閱讀 6217

佇列是對頭出、隊尾入的先進先出線性表。

需要兩個指標front和rear分別來指向隊頭和隊尾。

front指向隊頭元素的前乙個位置,rear總是指向隊尾元素。

進隊:rear+1

出隊:front+1

隊空條件:front=rear

隊滿條件:rear = maxsize - 1

但是這樣會出現假溢位的情況,因為退隊之後空出的位置就不能再用了。

為了解決這個問題,使用環形佇列

進隊:rear =(rear+1)% maxsize

出隊:front = (front+1) % maxsize

隊空條件:front=rear

隊滿條件:front = (rear + 1)% maxsize

此外,還可以引入count來記錄元素個數來管理佇列。

已知對頭隊尾的指標,求元素個數count : count = (rear - front + maxsize)%maxsize

已知隊頭front、元素個數conut,求隊尾: rear = (front + conut)%maxsize

已知隊尾rear、元素個數conut,求隊頭front: front = (rear - count + maxsize)%maxsize

queue.c**如下,包含了測試函式queuetest( )

#include "queue.h"

void initqueue(queue &qu)

status enqueue(queue& qu, elemetype_squ e)

status dequeue(queue& qu, elemetype_squ &e)

bool queueempty(queue& qu)

int queuecount(queue& qu)

void queuetest()

queue.h

#ifndef _inc_queue

#define _inc_queue

#include #include #include #define error 0

#define ok 1

#define elemetype_squ int //順序棧資料型別

//#define elemetype_lqu int //鏈式棧資料型別

#define maxsize_squ 100 //順序棧最大容量

typedef int status;

typedef struct qutype,*queue;

void initqueue(queue& qu);

status enqueue(queue& qu, elemetype_squ e);

status dequeue(queue& qu, elemetype_squ& e);

bool queueempty(queue& qu);

int queuecount(queue& qu);

void queuetest();

#endif

資料結構 佇列 順序佇列 迴圈佇列 鏈佇列)

前言 一 佇列的定義 二 佇列的順序儲存結構 1.順序佇列的定義 2.迴圈佇列定義 3.迴圈佇列的基本操作 三 佇列的鏈式儲存結構 1.鏈佇列的定義 2.鏈佇列的基本操作 佇列也是一種線性表,其特殊性在於佇列的基本操作是線性表的子集。佇列按 先進先出 的規則進行操作,故稱其為操作受限的線性表。佇列 ...

資料結構 佇列實現(順序迴圈佇列 鏈式佇列)

佇列的介面 public inte ce qqueue 存在假溢位問題!不建議使用 使用模擬迴圈的方式避免假溢位 實現 package pers.zhang.queue author zhang date 2020 1 17 11 45 順序迴圈佇列 public class seqqueue im...

資料結構 順序表實現環形佇列

1 佇列的定義 佇列是一種特殊的線性表,線性表兩端都可以進行插入刪除,而佇列只能在隊頭刪除,隊尾插入。插入元素稱為入隊,刪除元素稱為出隊。2 佇列的特點 1 只允許在一端進行插入資料操作,在另一端進行刪除資料操作的特殊線性表 2 進行插入操作的一端稱為隊尾 入佇列 3 進行刪除操作的一端稱為隊頭 出...