線性表之佇列

2021-08-02 10:05:30 字數 1358 閱讀 8474

與棧結構相對的是佇列結構,佇列結構就像生活中的排隊,其進出規則是」先進先出「。對於排隊,想必大家都懂^_^

先看一下結構定義:

typedef struct array2array2;
佇列的陣列實現要使用模運算,其實現原理是通過對下標進行模運算使陣列形成迴圈,頭尾相接。這樣就不用因為刪除元素而移動陣列了。陣列的任意位置都可以是佇列頭和尾,關於模運算,請參見(…先挖個坑)。

這樣當要求乙個head+1後的位置的演算法是:head = (head+1)模陣列長度。要求乙個下標 - n 後的位置的演算法是:新下標 = 舊下標+(陣列長度-n)模陣列長度。

如圖,當end = 5時,end+1 後的下標就是 end+1%length = 0,(5+1%6=0)。以此來實現迴圈。

佇列的鍊錶實現與 單鏈表 相似,在鏈尾新增元素,在鏈頭取元素。這裡不再重複。

具體實現**如下:

#define size 6 

//定義結構

typedef struct array2array2;

//初始化

array2 *newarr2()

//判空

int isempty2(array2 *arr)

//判滿

int isfull(array2 *arr)

//入隊

void push2(array2 *arr ,int value)

//len = (arr->end++)%arr->length;//(arr->end++)即使在括號裡面也是最後才加1

//printf("**

****

****

****

****

%d**

*%d\n",arr->end,len);

//arr->end--;

len = ++arr->end % arr->length;

arr->data[len] = value;

}//出隊

void pop2(array2 *arr)

arr->head = (arr->head + 1)%arr->length;

}int

*gethead(array2 *arr)

void queuetest()

printf("-----------------------\n");

push2(arr,4);

push2(arr,5);

while(!isempty2(arr))

}

線性表 佇列

和棧相反,佇列是一種先進先出 first in first out 縮寫為fifo 的線性表。它只允許在表的一端進行插入,而在另一端刪除元素。雙端佇列 限定插入和刪除操作在表的兩端進行的線性表 單鏈佇列 佇列的鏈式儲存表示 和線性表類似,佇列也可以有兩種儲存表示。用鍊錶表示的佇列簡稱鏈佇列。type...

線性表 棧 佇列

輔助定義 define maxsize 5 define ok 0 define error 1 typedef int selemtype typedef int status 棧 順序 鏈式 相關結構體定義 順序棧 typedef struct sqstack 順序棧共享空間 typedef s...

線性表 棧,佇列

1.3 棧 棧是一種先進後出的資料結構。只能在一端進行插入和刪除操作的特殊線性表。將資料進入棧稱為壓棧,資料出去稱為彈棧。壓棧 public void push t t 彈棧 public t pop 讓首結點指向第乙個結點的下乙個結點 head.next oldfirst.next 元素個數 1 ...