棧也是一種線性表結構,只不過棧的操作是受限的,它的特點就是在棧頂方向新增新的元素,且刪除元素也只能從棧頂方向刪除。因此棧是一種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;
}
//括號匹配:如果輸入的括號是成對匹配的,則輸出true,否則輸出false使用遞迴將十進位制轉換為二進位制輸出
void tobinary(int
x)//
使用棧做臨時儲存,進行 十進位制轉換為二進位制輸出
void tobin(int
x)while(x/=2
);
while(s.length()!=0
)}
boolbracematch()
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 ...