資料結構4 棧的c語言實現及基本操作

2021-10-04 20:44:08 字數 1626 閱讀 2197

棧是一種先進先出(last in first out,lifo)的操作受限的線性表,只能在一端進出操作,可以進出的一端稱為棧頂(top),另一端稱為棧底(base)。棧也是以用順序儲存和鏈式儲存兩種方式儲存;

動態分配:

typedef

struct sqstacksqstack;

靜態分配:

typedef

struct sqstacksqstack;

1.2.1 順序棧初始化:
/*分配記憶體空間並使頭尾指標重合*/

bool

initstack

(sqstack &s)

s.top = s.base;

return

true

;}

1.2.2 入棧:
/*入棧時先入元素到top所指位置然後top++*/

bool

push

(sqstack &s,

int e)

*s.top++

= e;

return

true

;}

1.2.3 出棧:
/*出棧是入棧的逆序*/

elemtype pop

(sqstack &s)

1.2.4 取棧頂元素:
/*與出棧相比,減少了top--的操作*/

elemtype gettop

(sqstack &s)

使用靜態分配的棧操作與上大同小異;

typedef

struct linknodelinknode,

*linkstack;

插入刪除和鍊錶類似,但是只能在棧頂操作,這裡只介紹入棧,請模擬自己寫出出棧操作:

/*初始化*/

bool

initstack

(linkstack &s)

/*不帶頭結點的鏈棧入棧*/

bool

push

(linkstack &s,

int e)

/*帶頭結點的鏈棧入棧*/

bool

push

(linkstack &s,

int e)

順序棧和鏈棧在基本操作上都只需要常數時間,所以在時間效率上難分伯仲。在空間效率上,順序棧需要預先分配固定長度的空間,有可能造成空間浪費或者溢位,但是鏈棧每次只分配乙個結點的空間,所以不會出現溢位,但是每個結點需要額外的指標域,空間開銷增大。因此,如果元素個數比較多,則選擇鏈棧,反之選擇順序棧,但一般情況下順序棧足以解決問題。

其次,棧的先進先出是人為規定的,而且我們的簡單實現中沒有實現從中間取出元素所對應的禁止操作,所以可以從中間取出元素,但是在使用一些語言封裝好的資料結構時一般不允許操作中間元素。

資料結構棧的基本操作實現 C語言實現

棧的基本操作的實現 棧 是一種受限的鍊錶只允許在同一端插入 入棧 push 和刪除 出棧 pop 所以棧遵循先進後出的原則 棧的基本操作的實現如下 include include typedef int elementtype typedef struct node node,stack 定義基本操...

資料結構 棧(C語言實現)

定義 一種先進後出的資料結構 實現 標頭檔案 include include typedef struct node 定義節點 pnode,node typedef struct stack 定義棧 stack,pstack 棧的初始化 void init pstack ps else 判斷棧非空 ...

資料結構 一 棧的基本操作C語言實現

撤回,即 ctrl z,是我們最常見的操作之一,大多數應用都會支援這個功能。你知道它是怎麼實現的嗎?答案是這樣的 把之前的應用狀態 限制個數 儲存到記憶體中,最近的狀態放到第乙個。這時,我們需要棧 stack 來實現這個功能。棧中的元素採用 lifo last in first out 即後進先出。...