死磕演算法第二彈 棧 佇列 鍊錶 1

2022-08-03 09:27:08 字數 2217 閱讀 7218

本文整理** 《輕鬆學演算法——網際網路演算法面試寶典》/趙燁 編著

棧是有著特殊規則的資料結構,棧有著重要的乙個特點——後進先出(lifo, last in first out),也可以叫做先進後出(filo, first in last out),我們無論如何只能夠從一端去操作元素。

棧又叫做堆疊(stack), 這裡說明一下不要將它和堆混淆。實際上堆和棧是兩種不同的概念,棧是一種只能在一段進行插入和刪除的線性資料結構。

一般來說,棧主要有兩個操作:乙個是進棧(push),又叫作入棧、壓棧;另乙個是出棧(pop),或者叫作退棧。

棧是一種比較簡單的資料結構。

棧一般使用一段連續的空間進行儲存,通常預先分配乙個長度,可以簡單地使用陣列去實現。

棧只有乙個方向可以對棧內的元素進行操作,而從棧中最下面的乙個元素稱為棧底,一般是陣列的第0個元素,而棧頂是棧內最後放入的元素。

一般而言,定義乙個棧需要初始的大小,這就是棧的初始容量。當需要放入的元素大於這個容量,就需要擴容。

棧出入元素的操作如下。例如我們初始化乙個長度為10的陣列,並想其中放入元素,根據棧的定義,只能從陣列的一端放入元素,我們設定這一段為陣列中較大下標方向。我們放入第乙個元素,由於棧內沒有元素,我們第乙個元素落到陣列的第0個下標的位置上;接著放入第二個元素,第二個元素該放入到下標為1的位置上;以此類推,之後我們放入第五個元素時,放入棧中的下標第4個位置上。現在進行出棧操作,出棧智慧型從一端操作,我們之前設定只能從下標較大的方向操作,因此需要確定陣列中下標最大的方向中存在棧元素的位置下標是多少。我們一般會在棧中做個計數器來記錄這個值。現在棧中有5個元素,所以講陣列中的第五個位置也就是下標為4的元素出棧。此時陣列中只剩下4個元素了。

public class stack

public stack(int init)

array = new object[init];

}/**

* 入棧

** @param item 入棧元素

*/public void push(t item)

array[size++] = item;

}/**

* 獲取棧頂元素,但是沒有出棧

* @return 棧頂元素

*/@suppresswarnings("unchecked")

public t peek()

return (t) array[size - 1];

}/**

* 出棧,同時獲取棧頂元素

* @return 棧頂元素

*/public t pop()

/*** 棧是否滿了

* @return 棧是否滿了

*/public boolean isfull()

/*** 棧是否為空棧

* @return 是否為空棧

*/public boolean isempty()

public int size()

}

在實現思考當中,第一步是寫出來,第二步是擴容,第三步是考慮到異常情況。乙個資料結構的實現或多或少總會有些東西可以擴充套件的,想到多少寫多少,在面試或筆試一定會有所加分的。

測試**:

public class stacktest 

}

棧的特點顯而易見,只能在一段操作,遵循先進後出或者後者先出的原則。

逆序輸出

由於棧具備先進後出的特點,所以逆序輸出是其中乙個非常簡單的應用。首先把所有的元素按照元素入棧,然後把所有的元素出棧並輸出,輕鬆實現逆序輸出。

語法檢查,符號成對出現

在程式語言中,一般括號都是成對出現的,比如「[」和「]」「」「(」和「)」「」(這裡排除大於小於號的作用).

凡是遇到括號的前半部分,即為入棧符號(push);凡是遇到括號的後半部分,就比對是否與棧頂元素相匹配(peek),如果相匹配則出棧(pop),否則就是匹配出錯。

數制轉換(將十進位制的數轉換為2-9的任意進製數)

通過求餘法,可以將十進位制數轉換為其他進製,比如轉為8進製,則將原十進位制數除以8,記錄餘數,然後繼續將商除以8,一直到商等於0為止,最後將餘數倒著寫出來就行了。

常聽說到程式語言呼叫中的「函式棧」,就是在我們呼叫方法時計算機會執行push方法,記錄呼叫,在return時也就是方法結束之後,執行pop方法,完成前後對應

啊哈演算法 第二章 棧 佇列 鍊錶

2.2 解密回文字串 棧 將一串數字奇數字刪除,偶數字依次移動到末尾,直到只剩下乙個數字,最後將奇數字數字依次回歸,得到最終序列。1 我的解法 題目要求將奇數字刪除再歸位,可理解為跳過奇數字數字,再移動偶數字數字。include intmain else getchar getchar return...

啊哈!演算法 棧 佇列 鍊錶

特點 管子,兩邊開口,先進先出 first in first out 佇列的三個基本元素 乙個陣列,兩個變數 include using namespace std struct queue typedef struct queue queue 將 struct queue 重新命名為 queue ...

棧佇列鍊錶演算法總結

1.佇列 struct queue 2.棧棧的基本操作 定義棧 stacks 入棧 定義棧元素 s.push i 出棧 刪除棧元素 s.pop 返回棧頂元素的值 s.top 判斷棧是否為空 s.empty 值為0說明不空 值為1說明棧為空 棧的用法例項 include include using n...