資料結構 棧

2021-08-03 00:17:02 字數 2467 閱讀 5012

一、基礎知識

棧:棧是乙個後進先出的線性表,它要求只在

表尾

行刪除和插入操作。

所謂的棧就是乙個特殊的線性表(順序表、鍊錶),但是它在操作上有一些特殊的要求和限制:

1.棧的元素只能「後進先出」。

2.棧的操作只能在這個線性表的表尾進行。

3.對於棧來說,表尾稱為棧頂(top),相應的表頭稱為棧尾(bottom)。

二、棧的順序儲存結構

typedef

intelemtype

;

typedef

struct

sqstack

;

2.1    建立乙個棧

#define

stack_init_size

100

void

initstack

(sqstack *s

)

s

->

top =s

->

base

;//最開始棧頂就是棧底

s

->

stacksize

=stack_init_size

;

}

2.2    入棧操作

#define

stackincrement

10

void

push

(sqstack *s

,elemtype

e)

s

->

top =s

->

base +s

->

stacksize

;//設定棧頂

s

->

stacksize =s

->

stacksize

+stackincrement

;//設定棧的最大容量

}

*(s

->

top)=e

;

s

->

top++;

}

2.3    出棧操作

void

pop(

sqstack *s

,elemtype*e

)

*e

=*--(

s->

top);        //指向棧頂的位置是沒有東西的

}

2.4    清空乙個棧

所謂清空乙個棧,就是將棧中的元素全部作廢,但

棧本身物理空間並不發生改變(不是銷毀)。

void

clearstack

(sqstack *s

)

2.5    銷毀乙個棧

銷毀乙個棧和清空乙個棧不同,銷毀乙個棧要釋放掉該棧所佔據的物理記憶體空間。

void

destroystack

(sqstack *s

)

s

->

base =s

->

top

=null

;

s

->

stacksize =0

;

}

2.6    計算乙個棧的當前容量

計算棧的當前容量就是計算棧中元素的個數,棧的最大容量是指該棧佔據記憶體空間的大小,其值是s.stacksize,它與棧的當前容量不是乙個概念。

int

stacklen

(sqstack *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 插入 進...