棧 棧 鏈式棧,順序棧,共享棧

2021-09-07 14:31:00 字數 4229 閱讀 3088

棧也是一種線性表結構,只不過棧的操作是受限的,它的特點就是在棧頂方向新增新的元素,且刪除元素也只能從棧頂方向刪除。因此棧是一種lifo(後進先出)特性的資料結構。

壓棧:新的元素放入棧的操作。

出棧:從棧中移除乙個元素的操作。

因為棧是一種線性結構,所以可以通過前面所學的鍊錶和順序表作為內部實現。

我們可以把乙個棧看做是乙個開口的箱子,箱子口就是棧頂,箱子底就是棧底。我們依次把 數學書,英語書,放進空箱子裡,如果我們要再放一本語文書,則只能放在最頂層,如果我們要從箱子裡拿出一本書,只能取出最頂層(棧頂)的語文書。這就是棧的標誌性操作和特性。

鏈式棧的優點是:不需要預先分配容量,也無需增加容量。

#include#include

#include

using

namespace

std;

struct

snode

};class

stack

~stack()

}/**壓棧操作 ,頭插法

儲存元素使用的陣列

int top; //

下乙個棧頂元素的在陣列中的索引。

使用順序棧時,要預先分配1個大的陣列空間。共享順序棧可以讓2個棧共享同乙個陣列空間。

考試和面試常用,實際開發不常用。 

#include#include

#include

class

stack

; //

內部陣列的容量

int elements[max_size]; //

儲存元素使用的陣列,stack1和2共享

int top1; //

stack1中 下乙個棧頂元素的在陣列中的索引。

int top2; //

stack2中 下乙個棧頂元素的在陣列中的索引。

public

: stack()

/****

用choose 代表stack1 和 stack2,預設是1

****/bool peek(int &e,int choose = 1) const

case2:

default

:

throw std::out_of_range(0

); }

}bool pop(int choose = 1

)

case2:

default

:

throw std::out_of_range(0

); }}

bool push(int e,int choose = 1

)

case2:

default

:

throw std::out_of_range(0

); }

}

size_t length(

int choose = 1) const

}

bool empty(int choose = 1) const

}/***

棧滿的標誌是: top1 > top2 ,陣列還有1個空間的標誌是 top1 == top2

***/bool full()const

void clear(int choose = 1

)

}}; int

main()

cout

<

\n----pop elements from stack2----

"<

for(int i=0;i<5;++i)

cout

<

\n-----stack1 status-----

"<

cout

empty?

"cout

full?

"cout

<

length?

"cout

<

\n-----stack2 status-----

"<

cout

empty?

"<2)<

cout

full?

"cout

<

length?

"<2)<

return0;

}

進製轉換:十進位制轉二進位制輸出

//

使用遞迴將十進位制轉換為二進位制輸出

void tobinary(int

x)//

使用棧做臨時儲存,進行 十進位制轉換為二進位制輸出

void tobin(int

x)while(x/=2

);

while(s.length()!=0

)}

括號匹配:如果輸入的括號是成對匹配的,則輸出true,否則輸出false

bool

bracematch()

if(token == '

(' || token == '['

)

if(token == '

)' && !s.empty())

while(out != '

(' && !s.empty());

continue

; }

if(token == '

]' && !s.empty() )

while(out != '

[' && !s.empty() );

continue

; }

}return s.empty(); //

如果棧為空則說明括號匹配

}

棧的定義,順序棧,鏈式棧

棧又名堆疊,是資料暫時儲存的地方。它一種只能在頂端進行插入和刪除操作的特殊線性表,它按照先進後出的原則儲存資料,先進的資料被壓入棧底,最後的資料在棧頂,需要讀取資料的時候從棧頂開始彈出資料。棧具有記憶作用,對棧的插入和刪除操作中,不需要改變棧底指標。棧中允許進行插入和刪除操作的一端稱為棧頂 top ...

順序棧和鏈式棧

順序棧 採用順序儲存結構的棧 push pop peek 方法的時間複雜度為o 1 當需要擴充棧容量時push 方法的時間複雜度為o n package com.lzw.demo.stacktest public inte ce sstack package com.lzw.demo.stackte...

順序棧與鏈式棧

棧 邏輯結構 限制為只有乙個埠進出元素,就導致先進後出和特性。順序棧 容量在限 鏈式棧 可以無限容量 一般常用於,表示式解析,記憶體管理 函式的呼叫提供支援 順序棧 include include include define type int typedef struct stack stack ...