演算法系列15天速成 第十天 棧

2021-09-23 21:31:29 字數 4107 閱讀 7139

今天跟大家聊聊棧,在程式設計中,棧的使用還是非常廣泛的,比如有「括號匹配問題「,」html結構匹配問題「。

所以說掌握了」棧「的使用,對我們學習演算法還是很有幫助的。

一: 概念

棧,同樣是一種特殊的線性表,是一種last in first out(lifo)的形式,現實中有很多這樣的例子,

比如:食堂中的一疊盤子,我們只能從頂端乙個乙個的取。

二:儲存結構

」棧「不像」佇列「,需要兩個指標來維護,棧只需要乙個指標就夠了,這得益於棧是一種一端受限的線性表。

這裡同樣用」順序結構「來儲存這個」棧「,top指標指向棧頂,所有的操作只能在top處。

**段:

#region 棧的資料結構

/// /// 棧的資料結構

///

public class seqstack

}#endregion

三:常用操作

棧的操作有:①初始化棧,②入棧,③出棧,④獲取棧頂。

1: 初始化棧

這個還是比較簡單的,初始化棧時,設定預設top指標為-1,這個就不用圖來展示了。

**段:

#region 棧的初始化操作

/// /// 棧的初始化操作

///

///

///

public seqstackseqstackinit(int length)

#endregion

2:入棧

這個操作主要就是做兩件事情:① 將元素從棧頂壓入,② top指標自增。

**段:

#region 入棧

/// /// 入棧

///

///

///

///

public void seqstackpush(seqstackseqstack, t data)

#endregion

3:出棧

同樣跟「入棧」類似,需要做兩件事情,①乾掉top處的元素,②top指標自減。

**段

#region 出棧

/// /// 出棧

///

///

///

///

public t seqstackpop(seqstackseqstack)

#endregion

4:獲取棧頂元素

這個很簡單,跟「出棧」唯一不同的是不破壞棧頂元素,只是翻出來看看而已。

**段

#region 獲取棧頂

/// /// 獲取棧頂

///

///

///

///

public t seqstackpeek(seqstackseqstack)

#endregion

總的執行**如下

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace seqstack

); stackmanager.seqstackpush(seqstack, new student() );

stackmanager.seqstackpush(seqstack, new student() );

console.writeline(".... 壓入成功,當前棧中元素有:" + stackmanager.seqstacklen(seqstack) + "個");

console.writeline("\n****************** 檢視棧頂元素 ********************");

var result = stackmanager.seqstackpeek(seqstack);

console.writeline("棧頂元素為:id=" + result.id + ",name=" + result.name + ",age=" + result.age);

console.writeline("\n******************** 彈出棧頂元素 ***********************");

stackmanager.seqstackpop(seqstack);

console.writeline("\n****************** 檢視棧中的元素 ********************");

for (int i = 0; i < stackmanager.seqstacklen(seqstack); i++)

console.read();}}

#region 學生資料實體

/// /// 學生資料實體

///

public class student

public string name

public int age

}#endregion

#region 棧的資料結構

/// /// 棧的資料結構

///

public class seqstack

}#endregion

public class seqstackclass

#endregion

#region 判斷棧是否為空

/// /// 判斷棧是否為空

///

///

///

///

public bool seqstackisempty(seqstackseqstack)

#endregion

#region 清空棧

/// /// 清空棧

///

///

///

public void seqstackclear(seqstackseqstack)

#endregion

#region 棧是否已滿

/// /// 棧是否已滿

///

///

///

public bool seqstackisfull(seqstackseqstack)

#endregion

#region 入棧

/// /// 入棧

///

///

///

///

public void seqstackpush(seqstackseqstack, t data)

#endregion

#region 出棧

/// /// 出棧

///

///

///

///

public t seqstackpop(seqstackseqstack)

#endregion

#region 獲取棧頂

/// /// 獲取棧頂

///

///

///

///

public t seqstackpeek(seqstackseqstack)

#endregion

#region 獲取棧中元素個數

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

演算法系列15天速成 第十天 棧

今天跟大家聊聊棧,在程式設計中,棧的使用還是非常廣泛的,比如有 括號匹配問題 html結構匹配問題 所以說掌握了 棧 的使用,對我們學習演算法還是很有幫助的。一 概念 棧,同樣是一種特殊的線性表,是一種last in first out lifo 的形式,現實中有很多這樣的例子,比如 食堂中的一疊盤...

演算法系列15天速成 第十天 棧

一 概念 棧,同樣是一種特殊的線性表,是一種last in first out lifo 的形式,現實中有很多這樣的例子,比如 食堂中的一疊盤子,我們只能從頂端乙個乙個的取。二 儲存結構 棧 不像 佇列 需要兩個指標來維護,棧只需要乙個指標就夠了,這得益於棧是一種一端受限的線性表。這裡同樣用 順序結...

實習第十天

今天電梯有點慢,等得我半小時才到公司。今天弄資料庫介面工具的時候,被松哥按在地上摩擦了。今天加班,在下班的時候,久久等不到電梯,想起了 上有個應該需要修改,然後回公司修改,改了半天,發現還是原來的好,於是恢復原樣,我就下班了,有點搞笑。這段時間上火非常嚴重,整個人的狀態都不好,做事情也沒精神。面對各...