棧:
棧(stack)又名堆疊,它是一種運算受限線性表。其特點在於僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一 個棧插入新元素又稱作進棧(入棧 or 壓棧);從乙個棧刪除元素又稱作出棧(退棧)。
其重要的特性可以簡述為lifo(last in first out),也就是「後入先出」,類似於在桶中放盤子,只能從頂部放上去,也只能從最高處拿出去。
如下圖,我們可以用一種序列來表示這個棧[a1,a2...an-1,an>,其中尖括號》表示棧頂,中括號[表示棧底。
使用標準庫的棧和佇列時,先包含相關的標頭檔案
#include
定義棧如下:
stackstk;
棧提供了如下的操作
empty() 如果棧為空返回true 否則返回false
size() 返回棧中元素的個數
pop() 刪除棧頂元素但不返回其值
top() 返回棧頂的元素,但不刪除該元素
push() 在棧頂壓入新元素
棧是一端受限,一段允許進行操作的線性表。我自己理解時,會將它理解成乙個裝書的盒子。放書,取書,就是進行的操作。這個的特點就是,你放了一踏書,現在你想取書,你只能先把上面的書乙個個取出來,即:先放的後取,後放的先取。放在棧上說,就是先進後出。
明白了棧的定義,現在要實際的實際,首先是它的邏輯結構:線性表。它是線性的。
1.順序儲存:
先進行分析下:首先要分配乙個足夠大的陣列,現在有了這個陣列,需要的還有,必須有個東西能乙個控制一端不讓操作(陣列的前端從下標為0開始),一端要進行增刪,這樣就可以說是具備了棧有的特點,不讓操作的叫棧底,進行操作的是棧頂。
在順序棧中,有上溢和下溢的概念,當壓入資料大於儲存範圍就會發生上溢位,當棧中無資料時進行取出操作就會發生下溢位,下溢本身可以表示棧為空棧,因此可以用它來作為控制轉移的條件。
2.鏈式儲存:
控制入棧出棧的埠,棧頂一般是鍊錶的頭,第乙個節點,棧底一般是最後乙個節點。(可以避免順序儲存的溢位),同時節省空間,要多少,申請多少。鍊錶的運用中同時要注意一旦申請了,最後要記得釋放,不然會帶來不可預計的後果。
若是棧中元素的數目變化範圍較大或不清楚棧元素的數目,就應該考慮使用鏈式儲存結構
棧的具體應用:
編號為1,2,3,4 的四列火車通過乙個棧式的列車排程站,可能得到的排程結果有哪些?如果
有n 列火車通過排程站,請設計乙個演算法,輸出所有可能的排程結果。
解題思路:棧具有先進後出、後進先出的特點,因此,任何乙個排程結果應該是1 ,2 ,3 ,4
全排列中的乙個元素。由於進棧的順序是由小到大的,所以出棧序列應該滿足以下條件:對於
序列中的任何乙個數其後面所有比它小的數應該是倒序的,例如4321 是乙個有效的出棧序列,
1423不是乙個有效的出棧結果(4 後面比它小的兩個數 2 ,3 不是倒序)。據此,本題可以通過
演算法產生n 個數的全排列,然後將滿足出棧規則的序列輸出。
依此遞迴定義,遞迴演算法如下:
#includeusing namespace std;
int cont=1;
void out(int str,int n);
void perm(int str,int k,int n)
else}}
}if(flag)
{printf(" %2d:",cont++);
for(int i=0;i
STL之佇列 帆帆帆筆記系列
佇列是一種特殊的 線性表 它只允許在表的前端 front 進行刪除操作,而在表的後端 rear 進行插入操作。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列中沒有元素時,稱為空佇列。隊尾 rear 允許插入的一端 隊頭 front 允許刪除的一端 佇列特點 先進先出 fifo 佇列的結構 ...
帆軟報表學習筆記 行轉列
這次做的例子是 行轉列 廢話不多說 直接幹 首先先從資料庫中取出所要的資料,新增到模版資料集中,然後依次的把資料放到對於的單元格,用帆軟工具做行轉列的主要點是在於關鍵字的擴充套件方向,像本例中毒額 類名字的擴充套件方向是橫向擴充套件的。最後執行的結果如下圖 上面是利用帆軟的工具來實現行轉列的,下面一...
2020 11 20 帆軟直播培訓課程學習筆記
自助資料集是整個bi分析的起始點。資料集的設計和規劃是推廣自助分析的核心工作,設計自助資料集要同時兼顧,泛用性 高效性還有易用性。不要用程式設計師寫 的思路去建立自助資料集,要貼合bi工具的使用特點。高效性 要能快速開發資料集。易用性 對使用者友好。其實關鍵在於資料集設計得好不好,使用者只需簡單的操...