棧 順序棧(C )

2021-10-06 23:28:22 字數 1298 閱讀 5807

棧是只允許在一端進行插入或刪除操作的線性表。

假設某個棧s=(a1、a2、a3、a4、a5)。a1為棧底元素,a5為棧頂元素。由於棧只能在棧頂進行插入和刪除操作,進棧次序為a1、a2、a3、a4、a5出棧順序為a5、a4、a3、a2、a1,所以棧的操作特性是後進先出(lifo)。

如果有n個不同元素進棧,出棧元素不同排列的個數為1n+

1cn2

n\frac \textrm_^

n+11​c

n2n​

上述公式稱為卡特蘭數。

initstack(&s):初始化乙個空棧s。

stackempty(s):判斷乙個棧是否為空。

push(&s,x):進棧,若棧s未滿,則將x加入使之成為新棧頂。

pop(&s,&x)出棧,若棧s非空,則彈出棧頂元素,並用x返回。

gettop(s,&x)讀棧頂元素,若棧s非空,則用x返回棧頂元素。

destorystack(&s)銷毀棧,並釋放棧s占用的儲存空間。

棧的順序儲存型別:

typedef

struct

sqstack;

初始化:

void

initstack

(sqstack& s)

判斷乙個棧是否為空:

bool

stackempty

(sqstack s)

else

}

入棧:

bool

push

(sqstack& s, elemtype x)

else

}

出棧:

bool

pop(sqstack& s, elemtype& x)

x = s.data[s.top--];

//先刪除元素,再執行top--

return

true

;}

讀棧頂元素:

elemtype gettop

(sqstack s)

return s.data[s.top]

;}

銷毀棧:

由於沒有申請過空間,只需將top置為-1即可銷毀棧,棧會自動釋放記憶體。

void

destorystack

(sqstack& s)

C 鏈式棧和順序棧

分類 1.順序棧 2.鏈式棧 常用操作 push 和 pop 常見應用 1.括號匹配問題 2.逆波蘭表示式 說明 個人c 練習 鏈式棧 優點 棧的大小靈活 缺點 不能像陣列一樣靈活遍歷 include using namespace std 鏈式棧 struct data struct stackn...

棧,順序棧,鏈棧

棧作為一種限定性線性表,是將表的插入刪除限制為僅在表的一端進行,通常將表中允許插入刪除的一端叫做棧頂 top 因此棧頂的當前位置是動態變化的。棧的另一端叫做棧底 bottom 當棧中沒有元素時稱為空棧。插入操作稱為進棧或入棧,刪除操作稱為出棧或退棧。棧是先進後出的線性表,簡稱為lifo表。棧主要有兩...

棧 順序棧 鏈棧

棧 順序棧 鏈棧 分別用順序表和煉表實現棧,完成入棧 出棧 窺探棧頂元素等操作 commom.h ifndef common h define commom h include include include include include define elemtype int void swap...