(資料結構)棧講解和棧實現

2021-10-06 22:27:48 字數 2033 閱讀 3224

棧的概念

棧:一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行資料插入和刪除操作的一端稱為棧頂,另一端稱為棧底。棧中的資料元素遵守後進先出lifo(last in first out)的原則。

壓棧:棧的插入操作叫做進棧/壓棧/入棧,入資料在棧頂。

出棧:棧的刪除操作叫做出棧。出資料也在棧頂。

舉幾個例子更好的理解棧:

1.羽毛球桶,把羽毛球乙個乙個放進去,先取出來的一定是最後放進去的。

2.吃進去,吐出來(這個例子可能不太恰當,但是很直觀)

棧的結構

棧的實現

棧的實現一般可以使用陣列或者鍊錶實現,相對而言陣列的結構實現更優一些。因為陣列在尾上插入資料的代價比較小

棧的結構包括定長的靜態棧和支援動態增長的棧。一般使用後者較多。以下是動態增長棧的實現:

stack.h

#pragma once

typedef

int sdatatype;

typedef

struct stack

stack;

void

stackinit

(stack* ps)

;//入棧:尾插

void

stackpush

(stack* ps, sdatatype data)

;//出棧:尾刪

void

stackpop

(stack* ps)

;//獲取棧頂元素

sdatatype stacktop

(stack* ps)

;//獲取棧中有效元素個數

intstacksize

(stack* ps)

;//檢測是否為空

intstackempty

(stack* ps)

;//銷毀

void

stackdestroy

(stack* ps)

;

stack.c

#include

"stack.h"

#include

#include

#include

#include

void

stackinit

(stack* ps)

ps->capacity =10;

ps->size =0;

}void

checkcapacity

(stack* ps)

//2.拷貝元素

memcpy

(temp, ps->array,

sizeof

(sdatatype)

*ps->size)

;//3.釋放舊空間

free

(ps->array)

; ps->array = temp;

ps->capacity *=2

;}}//入棧:尾插

void

stackpush

(stack* ps, sdatatype data)

//出棧:尾刪

void

stackpop

(stack* ps)

//獲取棧頂元素

sdatatype stacktop

(stack* ps)

//獲取棧中有效元素個數

intstacksize

(stack* ps)

//檢測是否為空

intstackempty

(stack* ps)

//銷毀

void

stackdestroy

(stack* ps)

資料結構 棧講解

棧的基本原理 知識講解 棧也是一種操作 或者說運算 受到限制的特殊線性表。其插入進棧和刪除操作都限制在表的一端進行,這一端被稱為 棧頂 top 相對a的另一端稱為 棧 bottom 插入操作一般稱之為 進棧 push 或者 壓棧 刪除操作稱之為 出棧 pop 棧的特點是 先進後出 fifo,firs...

python資料結構 棧講解

應用實戰 棧有時也稱作下堆疊,是乙個有序集合,以列表的形式,但是他的新增和移除操作總是發生在同一端,被稱為頂端,也叫做棧頂,另一端被稱為低端,也叫棧底。可以理解為在桌子上疊放書本,我們放上去之後如果拿的話也是從上往下拿,放的話則是從下往上,我們往往取的都是放的時間最晚的,就是這個原理。棧的操作型別有...

資料結構 棧的實現(順序棧和鏈棧)

棧介面,描述棧的抽象資料型別,泛型引數t表示資料元素的資料型別 public inte ce sstack 棧有兩種基本的實現 順序棧,實現棧介面 public class seqstack implements sstack 預設構造,構造容量為64的空棧 public seqstack 判斷棧是...