陣列模擬佇列的兩種方式

2021-10-08 01:42:33 字數 2511 閱讀 2823

基本陣列模擬佇列

//陣列模擬佇列--arrayqueue類

class

arrayqueue1

// 判斷佇列已滿,當佇列尾指向陣列的頭時代表佇列已滿

public

boolean

isfull()

// 判斷佇列是否為空,佇列的頭和尾指向統一個地方時,代表隊列為空

public

boolean

isempty()

/** 在佇列中新增資料時

1. 將尾指標往後移:rear+1 , 當front == rear 【空】

2. 若尾指標 rear 小於佇列的最大下標 maxsize-1,則將資料存入 rear所指的陣列元素中,否則無法存入資料。 rear == maxsize - 1[佇列滿]

*///在佇列中新增資料

public

void

addqueue

(int num)

rear++

;// 隊尾後移

arr[rear]

= num;

}/**

1. 判斷佇列是否為空,為空則丟擲異常 (rear== front則隊列為空)

2. front指向隊首的前乙個位置,front後移指向隊首元素

*/// 獲取佇列資料

public

intgetqueue()

front++

;//隊首後移

return arr[front];}

//顯示佇列的所有資料

public

void

showqueue()

for(

int i =

0; i

//顯示佇列的頭資料,注意不是取出資料

public

intheadqueue()

return arr[front+1];}}

存在問題: 只能實現單次使用,無法服用

優化方向: 將陣列改為環形

環形陣列模擬佇列

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

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

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

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

當我們這樣分析, 佇列中有效的資料的個數 (rear + maxsize - front) % maxsize // rear = 1 front = 0

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

**如下:

class

criclequeue

// 判斷佇列是否已滿

public

boolean

isfull()

// 判斷佇列是否為空

public

boolean

isempty()

// 佇列中新增資料

public

void

addqueue

(int num)

arr[rear]

= num;

// rear必須取模,否則rear超出陣列的最大長度

rear =

(rear +1)

% maxsize;

}// 佇列中提取資料

public

intgetqueue()

/* front指向佇列的第乙個元素

1. 將front位置的值賦給乙個臨時變數

2. front後移

3. 返回臨時變數

*/int value = arr[front]

;// 與rear同理

front =

(front+1)

% maxsize;

return value;

}// 求出當前佇列有效資料的格式

public

intsize()

//檢視整個佇列

public

void

showqueue()

// 從front開始遍歷,遍歷

for(

int i = front; i

size()

; i++)}

// 顯示佇列的頭資料,不是取出資料

public

intheadqueue()

return arr[front];}

}

陣列的兩種傳遞方式

陣列傳遞 將陣列作為引數傳遞給函式,分值傳遞和位址傳遞。其中,值傳遞的效率較低,不建議使用。兩種傳遞方式都會改變main函式中陣列的值,如下 中a 3 的結果都為6。注意區分陣列的值傳遞和函式值傳遞的區別。陣列的兩種傳遞方式 includeusing namespace std 值傳遞 void f...

陣列的兩種建立方式

var 陣列名 new array 定義了乙個空 的陣列 var array1 new array 定義了乙個長度為6的陣列 var array2 new array 6 輸出陣列的每個值都是 undefined console.log array2 可以直接定義陣列的具體值 var array3 ...

陣列中的兩種賦值方式

我們知道,變數的三要素是 資料型別 變數名 值,那麼賦值給b變數有兩種賦值方式有兩種,分別是值傳賦值和用賦值,那麼兩者之間有什麼區別呢?1 傳值賦值 傳值賦值是將變數的值複製出乙份新的值 值是一樣的 只是在記憶體中出現兩份不同的記憶體空間。將新值記憶體空間位址賦值給新的變數名字。修改兩個變數的值時還...