棧(stack)僅僅可以表尾插入和刪除操作。即我們可以認為,棧是先進後出的。棧就是一種特殊的線性表,即它存在前驅後繼關係。它特殊點在於,它限制了整個線性表的插入和刪除位置,只能在棧頂進行。
函式名功能
initstack(*s)
建立乙個空的棧s
destroystack(*s)
銷毀乙個棧s
clearstack(*s)
清空棧stackempty(s)
如果棧是空的,返回ture
gettop(s,*e)
若棧存在且非空,用e返回棧頂元素
stacklenth(s)
返回s的元素個數
push(*s,e)
在棧頂插入e
pop(*s,*e)
刪除棧頂的元素,用e返回
status push
(sqatack *s,selemtype e)
s->top++
;s->data[s->top]
=e;return ok;
}
status pop
(sqatack *s,selemtype e)
*e=s->data[s->top]
s->top--
;return ok;
}
棧的鏈式儲存結構,簡稱為鏈棧
理解起來就是加入指標,把棧頂放在單鏈表的頭部。
棧的引入簡化了程式設計,劃分了不同的關注層次。
棧有乙個非常重要的應用:遞迴
為了說明,我們舉乙個例項:斐波那契數列
遞迴的定義:乙個直接呼叫自己或通過一系列的呼叫語句間接地呼叫自己的函式,稱為遞迴函式。
%
%列印前40位斐波那契數列
intfbi
(int i)
intmain()
我們可發現,用遞迴的方法比常規的迭代辦法**短且方便。 資料結構(二)棧結構
template t stack pop void temp stacklist top top return temp 從棧頂壓入出乙個元素 templatet t stack push const t item top stacklist top item 讀棧頂元素 template t st...
資料結構(二) 棧
棧也是一種線性儲存結構,具有先進後出的特點 word中的撤銷操作,作業系統的方法呼叫都利用了棧 棧還可以用來做匹配,比如括號匹配等 基於陣列的棧入棧push使用陣列的addlast 追加 取資料時使用陣列的getlast 做出棧pop 操作 這次模擬實現的棧是基於上篇部落格實現的動態陣列實現的 pu...
資料結構 二 棧
1.簡介 1.1 棧stack 1 棧是一種線性結構 2 相比陣列,棧對應的操作是陣列操作的子集。3 棧的本質就是乙個陣列,我們把資料排開來放,但是規定 新增元素的時候只能從一端新增元素,也只能從一端取出元素。這一段通常稱為 棧頂 1.2 新增資料的規則 1 相當於在在乙個桶中新增資料。這個操作叫入...