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

2022-09-27 04:27:14 字數 3894 閱讀 3766

一: 概念

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

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

二:儲存結構

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

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

**段:

複製** **如下:

#region 棧的資料結構

///

/// 棧的資料結構

///

public class seqstack

}#endregion

三:常用操作

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

1: 初始化棧

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

**段:

複製** **如下:

#region 棧的初始化操作

///

/// 棧的初始化操作

///

///

///

public seqstack seqstackinit(int length)

#endregion

2:入棧

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

**段:

複製** **如下:

#region 入棧

///

/// 入棧

///

///

///

///

public void seqstackpush(seqstack seqstack, t data)

#endregion

3:出棧

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

**段複製** **如下:

#region 出棧

///

/// 出棧

///

///

///

///

public t seqstackpop(seqstack seqstack)

#endregion

4:獲取棧頂元素

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

**段複製** **如下:

#region 獲取棧頂

///

/// 獲取棧頂

///

///

///

///

public t seqstackpeek(seqstack seqstack)

&n程式設計客棧bsp; 

#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

}&nbs程式設計客棧p;   #endregion

public class seqstackclass

#endregion

#region 判斷棧是否為空

///

/// 判斷棧是否為空

///

///

///

///

public bool seqstackisempty(seqstack seqstack)

#endregion

#region 清空棧

///

/// 清空棧

///

///

///

public void seqstackclear(seqstack seqstack)

#endregion

#region 棧是否已滿

///

/// 棧是否已滿

///

///

/// 程式設計客棧ack">

public bool seqstackisfull(seqstack seqstack)

#endregion

#region 入棧

///

/// 入棧

///

///

///

///

public void seqstackpush(seqstack seqstack, t data)

#endregion

#region 出棧

///

/// 出棧

///

///

///

///

public t seqstackpop(seqstack seqstack)

#endregion

#region 獲取棧頂

///

/// 獲取棧頂

///

///

///

///

public t seqstackpeek(seqstack seqstack)

#endregion

#region 獲取棧中元素個數

///

/// 獲取棧中元素個數

///

///

///

///

public int seqstacklen(seqstack seqstack)

#endregion}}

本文標題: 演算法系列15天速成 第十天 棧

本文位址:

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

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

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

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

實習第十天

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