棧的解讀

image

前沿

棧普遍應用在各類軟件系統中,因此這塊的知識點咱們也要好好掌握起來。算法

定義

(stack)是限定僅在表尾進行插入或刪除操做的線性表。數組

簡單的來講就是一種能夠實現"先進後出" 的存儲結構spa

棧相似於箱子指針

分類

棧通常分爲兩類code

  • 靜態棧 (相似於用數組實現)
  • 動態棧 (相似於用鏈表實現)

算法

這邊咱們來看看 棧的出棧 和入棧的僞算法blog

先來看看入棧內存

image

//僞代碼
void push(struct Stack *pS, int val)
{
    struct Node * pNew = (struct Node *)malloc(sizeof(struct Node));
    pNew->data = val;
    pNew->pNext = pS->pTop; 
    pS->pTop = pNew;
    return;
}
  1. 首先初始化的時候 pTop 和 pBottom 都指向空
  2. 而後咱們建立一個節點 pNew, 讓他指向下一個節點的指針域。這裏咱們要注意,這裏應該指向的是 pTop所指向的指針域
  3. 最後把 pNew 賦值給 pTop, 完成pTop 指向新的節點。

再來看看出棧 寫法it

image

//僞代碼
bool pop(struct Stack *pS, int * pVal)
{    
        struct Node * q = pS->pTop;
        *pVal = q->data;
        pS->pTop = q->pNext;
        free(q);
        q = NULL;
        return true;    
}
  1. 出棧算法看過去時簡單的,但有點要特別注意,就是要記得釋放內存,避免野指針
  2. 因此咱們定義一個 指針變量 q 來作臨時存儲使用。
  3. 最後咱們在free()釋放內存

致謝

感謝你看完這篇文章,有什麼不對的地方歡迎指出,謝謝🙏class

相關文章
相關標籤/搜索