棧
- 邏輯結構:先進後出
- 棧(stack)是一種只能在一端(棧頂,另一端叫棧底)進行插入或刪除操作的線性表。
- 棧的邏輯結構屬於線性表,只不過在操作上加了一些約束。
存儲結構:
一、順序棧
- 順序棧的實現方法:
int stack[maxSize];
int top = -1
- 元素入棧:
stack[++top] = 1;
stack[++top] = 2;
……
- 元素出棧:
x = stack[top--];
- 如何判斷棧空和棧滿:
(maxSize爲數組長度:8)
二、鏈棧
-
鏈棧的實現方法:
-
元素入棧:
(始終讓top指向新插入的結點) -
元素出棧:
-
如何判斷棧滿或棧空:
隊列
- 邏輯結構:先進先出
- 隊列(queue)是一種插入元素只能在一端(隊尾)能進,刪除元素只能在另一端(隊頭)進行的線性表。
- 隊列的邏輯結構屬於線性表,只不過在操作上加了一些約束。
存儲結構:
一、順序隊列
- 順序隊列的實現方法:
int queue [maxsize];
int front 0, rear = 0;
- 錯誤的元素入隊:
queue[++rear] = x; //rear尾指針
- 錯誤的元素出隊:
x = queue[++front]; //front頭指針
上邊兩種操作會造成假溢出(下圖繼續入隊元素就會發生數組越界的情況)
- 正確的元素入隊:
rear=(rear+1) %maxSize; //rear此時爲8,maxSize是9,通過此操作rear=0,形成循環
queue [rear] = x;
- 正確的元素出隊:
front=(front+1)%maxSize;
x= queue [front];
- 如何判斷隊空和隊滿:
二、鏈隊列
1.head->next – NULL爲真,則隊空;
只有有足夠的內存,隊就不會滿。
如果rear和front包裹在一個結構體中:
2.front爲空時隊列爲空。