一、什麼是棧
棧是只能在表尾進行插入和刪除的線性表,又稱後進先出線性表,簡稱lifo結構。在軟體應用中,比如瀏覽器的後退鍵、文件的撤銷操作,都是通過棧來實現的。
下面是有關棧的幾個概念:
1.棧頂:允許進行插入和刪除操作的一段稱為棧頂
2.棧底:與棧頂相對應的,不允許進行插入和刪除操作的一段稱為棧底
3.空棧:不含任何資料元素的棧
4.棧的操作
在棧中插入乙個元素,稱為進棧,又稱壓棧。
從棧中刪除乙個元素,稱為出棧,又稱彈棧。
需要注意的是最先進棧的元素,並非只能最後出棧,而是只要保證乙個元素位於棧頂,就能最先出棧。
二、棧的順序儲存結構——順序棧
1.定義及初始化
在c語言中,我們使用結構體定義棧。而c++使用類模板。相較而言,c++的**複雜性更高,空間使用也更加靈活。
//c
#define stacksize
100typedef int datatype;
typedef struct
seqstack;
void
initstakk
(seqstack* s)
//棧的初始化操作
//c++
template
class
stack
~stack()
};
2.刪除棧中所有元素
//c
void
clearstack
(seqstack* s)
3.判斷棧是否為空
//c
bool stackempty
(seqstack* s)
c語言中,可以不使用結構體指標為形參,但結構體變數為形參是將結構體拷貝過來,需要404個位元組的空間,而指標只需要8個位元組的空間。拷貝和釋放都會降低效率。
4.判斷棧是否為滿
//c
bool stackfull
(seqstack* s)
5.進棧
//c
#define error
1#define ok
1status push
(seqstack* s,datatype e)
//status是一種函式型別,函式返回值為函式結果狀態**
++s-
>top;
//top由-1指向0
s->data[s-
>top]
= e;
//即s->data[0] = e
returnok;
}
//c++
bool push
(const type &ele)
top++
;//棧頂指標由-1指向0
elements[top]
= ele;
//將元素ele加入棧中
return
true
;}
6.獲取棧頂元素
//c
status gettop
(seqstack* s,datatype* e)if(
stackempty
(s))
*e= s-
>data[s-
>top]
;returnok;
}
//c++
type top()
7.出棧
//c
status pop
(seqstack* s,datatype* e)
//棧頂指標top會移動
*e= s-
>data[s-
>top--];
returnok;
}
//c++
bool pop()
top--
;//棧頂指標減1就可以刪除棧頂元素
return
true
;}
8.獲取棧中儲存元素個數
//c
int stacklength
(seqstack* s)
資料結構 棧 棧
可以把棧想像成乙個桶 進棧 就是把和桶口一樣大的燒餅往桶裡面扔 出棧 就是把燒餅拿出來 特點 先進後出。先扔進去的燒餅最後才能拿出來,最後扔進去的燒餅,第乙個拿出來 剛開始top 1 top 1 然後把進棧的元素賦值給data top 入棧操作 void push stack s,int x els...
資料結構 棧
例子 棧是一種被限制在只能在表的一端進行插入和刪除運算的線性表。區域性變數是用棧來儲存的 可以進行插入和刪除的一端稱為 棧頂 top 另一端稱為 棧底 bottom 當表中沒有元素時 表長為0的棧 稱為 空棧。棧的修改是按 後進先出的原則進行,因此棧被稱為後進先出 last in first out...
資料結構 棧
1.棧stack 是限定僅在表尾進行刪除和插入操作的線性表。允許插入刪除的一端叫做棧頂top,另外一端叫做棧底bottom。棧又稱為後進先出 lifo 的線性表。即表尾是指棧頂。2.順序棧 定義 top指向可存入元素的位置。typedef struct stacktypestacktype 插入 進...