今天跟大家聊聊棧,在程式設計中,棧的使用還是非常廣泛的,比如有「括號匹配問題「,」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 的形式,現實中有很多這樣的例子,比如 食堂中的一疊盤子,我們只能從頂端乙個乙個的取。二 儲存結構 棧 不像 佇列 需要兩個指標來維護,棧只需要乙個指標就夠了,這得益於棧是一種一端受限的線性表。這裡同樣用 順序結...
實習第十天
今天電梯有點慢,等得我半小時才到公司。今天弄資料庫介面工具的時候,被松哥按在地上摩擦了。今天加班,在下班的時候,久久等不到電梯,想起了 上有個應該需要修改,然後回公司修改,改了半天,發現還是原來的好,於是恢復原樣,我就下班了,有點搞笑。這段時間上火非常嚴重,整個人的狀態都不好,做事情也沒精神。面對各...