小白也能看懂的數據結構:棧與隊列

  • 邏輯結構:先進後出
  • 棧(stack)是一種只能在一端(棧頂,另一端叫棧底)進行插入或刪除操作的線性表。
  • 棧的邏輯結構屬於線性表,只不過在操作上加了一些約束。

存儲結構:

一、順序棧

  1. 順序棧的實現方法:
int stack[maxSize];
int top = -1
  1. 元素入棧:
stack[++top] = 1;
stack[++top] = 2;
……
  1. 元素出棧:
x = stack[top--];
  1. 如何判斷棧空和棧滿:

在這裏插入圖片描述
(maxSize爲數組長度:8)

二、鏈棧

  1. 鏈棧的實現方法:
    在這裏插入圖片描述

  2. 元素入棧:
    在這裏插入圖片描述
    (始終讓top指向新插入的結點)

  3. 元素出棧:
    在這裏插入圖片描述

  4. 如何判斷棧滿或棧空:

在這裏插入圖片描述

隊列

  • 邏輯結構:先進先出
  • 隊列(queue)是一種插入元素只能在一端(隊尾)能進,刪除元素只能在另一端(隊頭)進行的線性表。
  • 隊列的邏輯結構屬於線性表,只不過在操作上加了一些約束。

存儲結構:

一、順序隊列

  1. 順序隊列的實現方法:
int queue [maxsize];
int front 0, rear = 0;
  1. 錯誤的元素入隊:
queue[++rear] = x;     //rear尾指針
  1. 錯誤的元素出隊:
x = queue[++front];     //front頭指針

上邊兩種操作會造成假溢出(下圖繼續入隊元素就會發生數組越界的情況)
在這裏插入圖片描述

  1. 正確的元素入隊:
 rear=(rear+1) %maxSize;    //rear此時爲8,maxSize是9,通過此操作rear=0,形成循環
 queue [rear] = x;
  1. 正確的元素出隊:
front=(front+1)%maxSize;
x= queue [front];

在這裏插入圖片描述

  1. 如何判斷隊空和隊滿:

在這裏插入圖片描述
在這裏插入圖片描述

二、鏈隊列

在這裏插入圖片描述
1.head->next – NULL爲真,則隊空;
只有有足夠的內存,隊就不會滿。

如果rear和front包裹在一個結構體中:
在這裏插入圖片描述
2.front爲空時隊列爲空。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章