與棧結構相對的是佇列結構,佇列結構就像生活中的排隊,其進出規則是」先進先出「。對於排隊,想必大家都懂^_^
先看一下結構定義:
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 ...