資料結構與演算法 二

2021-10-08 03:58:35 字數 2263 閱讀 7248

佇列是一種特殊的線性表(線性結構),特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列中沒有元素時,稱為空佇列。

佇列按照邏輯資料結構可以分為順序佇列和迴圈佇列.

順序佇列存在假溢位的現象,如下圖所示.

佇列中的元素只能從尾部入隊,從頭部出隊.如果這時 a1,a2 出隊,front 後移動到 2,如圖:

但是現在佇列明明有三個空位,卻只能向佇列中存乙個元素,這就是假溢位,針對這種情況,提出了迴圈佇列的概念,就是後面滿了,就再從頭開始,也就是頭尾相接的迴圈。

陣列和鍊錶

陣列模擬佇列的實現方式

(1) 我們用兩個變數front和rear分別記錄佇列前後端的下標,front隨著資料輸出而改變,rear隨著資料輸入而改變,

front和rear的定義如下:

如下圖所示:

(2) 資料入隊(addqueue)

1) 將尾針往後移動: rear + 1 ,當front == rear 就說明這是個空佇列了.

2) 若尾針 rear < maxsize -1 ,則新來的元素可以存入rear所在的位置處, rear = maxsize -1 說明佇列滿了.

3) front的初始索引為-1,指向佇列的頭部,是頭部元素的前乙個位置,rear的初始索引為-1,指向佇列的尾部元素,

陣列模擬迴圈佇列的實現方式

這是對陣列模擬佇列的優化,我們在這裡把陣列看作是乙個環形(通過front和rear取模來實現),我們需要注意以下幾點:

1). front 變數的含義: front 就指向佇列的第乙個元素, 也就是說 arr[front] 就是佇列的第乙個元素 ,front 的初始值 = 0

2). rear 變數的含義:rear 指向佇列的最後乙個元素的後乙個位置. 因為希望空出乙個空間做為約定.rear 的初始值 = 0

3). 當佇列滿時,條件是 (rear + 1) % maxsize == front【滿】

4). 對隊列為空的條件, rear == front 空

5). 當我們這樣分析, 佇列中有效的資料的個數 (rear + maxsize - front) % maxsize //eg: rear = 1 front = 0 ,則只有乙個元素在陣列中.

6). 我們就可以在原來的佇列上修改得到,乙個環形佇列

**實現如下:

//陣列實現迴圈佇列,我們需要知道的常見方法定義(功能)有:判斷佇列是否為滿,判斷佇列是否為空,新增資料到佇列,出隊,顯示所有資料,顯示佇列有效資料個數,顯示佇列的頭資料

/** * @description:陣列實現的迴圈佇列

* @author: tian

* @time: 2020/7/21 8:06

*/class

circlearray

public

boolean

isfull()

public

boolean

isempty()

public

void

addqueue

(int n)

arr[rear]

= n;

rear =

(rear +1)

% maxsize;

}public

intgetqueue()

int value = arr[front]

; front =

(front +1)

% maxsize;

return value;

}//當前佇列的有效資料個數

public

intsize()

//遍歷

public

void

showqueue()

int s =

size()

;for

(int i = front ; i < front +s;i++)}

}

資料結構與演算法二

資料結構作為一門學科主要研究資料的各種邏輯結構和儲存結構,以及對資料的各種操作。因此,主要有三個方面的內容 資料的邏輯結構 資料的物理儲存結構 對資料的操作 或演算法 通常,演算法的設計取決於資料的邏輯結構,演算法的實現取決於資料的物理儲存結構。邏輯結構 是指資料物件中資料元素之間的相互關係。其實這...

資料結構與演算法(二)

函式的漸近增長 給定兩個函式 f n 和 g n 如果存在乙個整數n,使得對於所有的n n,f n 總是比g n 大,那麼我們說f n 的增長漸近快於g n 如圖 演算法時間複雜度的定義 在進行時間演算法分析時,語句總的執行次數t n 是關於問題規模n的函式,進而分析t n 隨n的變化情況並確定t ...

資料結構與演算法(二)

介紹內容 大o表示法 1 演算法時間度量指標 賦值語句 一條賦值語句同時包含了表示式計算 和 變數儲存兩個基本資源2 聯絡 所以賦值語句被執行的次數與演算法執行的時間直接掛鉤 a 5b 6c 10for i in range n for j in range n x i j y j j z i i ...