基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)和算法4:棧

在線性表中,順序表和鏈表可以訪問任意位置結(jié)點,在任意位置插入和刪除結(jié)點。棧和隊列是對上述操作加以限制。

  1. 在線性表的一端插入、刪除、訪問結(jié)點。
  2. 在線性表的一端插入結(jié)點、另一端刪除、訪問結(jié)點。

1. 棧是什么?

棧是一種只能從表的一端存取數(shù)據(jù)且遵循 LIFO(先進(jìn)后出)原則的線性存儲結(jié)構(gòu)。

棧的開口端被稱為棧頂
封口端被稱為棧底。

通常只會對棧執(zhí)行以下兩種操作:

  1. 向棧中添加元素,此過程被稱為"進(jìn)棧"(入?;驂簵#?/li>
  2. 從棧中提取出指定元素,此過程被稱為"出棧"(或彈棧);

2. 棧怎么用?

棧一般用來處理逆序回退相關(guān)的處理。

3. 棧怎么實現(xiàn)?

棧是操作受限制的線性表,根據(jù)不同的存儲結(jié)構(gòu)可分成順序棧和鏈?zhǔn)綏!?/p>

  • 在順序棧中,可以將順序表的有效長度作為棧頂指針,在順序表的末尾刪除和插入節(jié)點。
  • 在鏈?zhǔn)綏V校梢詫㈡湵淼念^結(jié)點作為棧頂指針,入棧采用頭插法。

下面是順序棧的實現(xiàn)。

3.1 定義結(jié)構(gòu)

typedef int StackType; //存儲單元類型

typedef struct stackNode {
    StackType *element; //存儲空間基地址
    int size; //當(dāng)前長度
    int capacity; //當(dāng)前分配的存儲容量
}Stack;

3.2 定義操作

  1. 初始化棧
Stack stack_init(int size);
  1. 入棧
void stack_push(Stack* stack,StackType element);

3.訪問棧頂元素

StackType* stack_top(Stack* stack);
  1. 出棧
StackType stack_pop(Stack* stack);

4. 練習(xí)

5. 作業(yè)

雙棧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容