C語言資料結構之棧篇

2021-08-05 19:14:22 字數 1396 閱讀 8736

定義

●只允許在一端插入和刪除的線性表;

●允許插入和刪除的一端稱為棧頂(top),另一端稱為棧底(bottom)。

特點後進先出 (lifo)

adt stack

棧的應用舉例 

棧在表示式計算過程中的應用 :建立運算元棧和運算子棧。運算子有優先順序。規則: 

自左至右掃瞄表示式,凡是遇到運算元一律進運算元棧。

當遇到運算子時,如果它的優先順序比運算子棧棧頂元素的優先順序高就進棧。反之,取出棧頂運算子和運算元棧棧頂的連續兩個運算元進行運算,並將結果存入運算元棧,然後繼續比較該運算子與棧頂運算子的優先順序。

左括號一律進運算子棧,右括號一律不進運算子棧,取出運算子棧頂運算子和運算元棧頂的兩個運算元進行運算,並將結果壓入運算元棧,直到取出左括號為止。

棧的鏈結表示—鏈式棧

1.鏈式棧無棧滿問題,空間可擴充

2.插入與刪除僅在棧頂處執行

3.鏈式棧的棧頂在鏈頭

4.適合於多棧操作

下面是關於棧的一些操作

#include "linkstack.h"

#include

linkstack *create_stack()

// 置空棧

s->top = null;

return s;

}int stackempty (linkstack *s)

return s->top == null;

}int push (linkstack *s, stackdata x)

// 新建結點

node* node = (node*)malloc(sizeof(node)/sizeof(char));

if (node == null)

node->data = x;

node->next = s->top;

s->top = node;

return true;

}int pop (linkstack *s, stackdata *x)

if (stackempty(s))

node *p = s->top;

*x = p->data;

s->top = p->next;

free(p);

return true;

}int gettop (linkstack *s, stackdata *x)

if (stackempty(s))

*x = s->top->data;

return true;

}// 銷毀棧

int destroy(linkstack *s)

int x;

while(stackempty(s) != true)

free(s);

return true;

}

資料結構之棧篇

關於棧 棧對應的操作 實現棧介面的實現 棧介面 author wbkearly param 棧中元素型別 public inte ce stack 基於自己實現的陣列類來實現棧的相關操作 arraystack 這裡的array類是在我之前部落格中所建立的array類,由於array中的操作已經非常的...

C語言資料結構之順序棧

tips 前些天學習了順序表的一系列操作,今天來看看c語言資料結構之順序棧的實現以及關於順序棧的各種操作。棧的特點是先進後出,後進先出,在陣列中可利用乙個指向陣列下標指標top來進行順序棧的相關操作。首先我們定義乙個順序棧的結構體 define maxsize 10 給順序棧定義預設大小 typed...

資料結構篇 棧

本篇開始學習棧,首先棧這種資料結構是一種後進先出的結構,棧限定為只能在一段進行刪除或插入操作。比如我們要插入2 3 1三個數,按照2 3 1 的順序插入叫做入棧,出棧的順序就是1 3 2。現在嘗試寫乙個判斷回文串的程式。這裡講述用棧的思想來判斷回文串,主要思路是取字串的前半截入棧,然後確定要匹配的字...