資料結構 棧

2021-10-25 05:04:42 字數 2552 閱讀 4979

一、什麼是棧

棧是只能在表尾進行插入和刪除的線性表,又稱後進先出線性表,簡稱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 插入 進...