C#數(shù)據(jù)結(jié)構(gòu)之棧與隊列

隊列的插入操作在表的一端進(jìn)行而其他操作在表的另一端進(jìn)行棧的操作只能在表的一端進(jìn)行棧和隊列成為操作受限的線性表棧(Stack)是操作限定在表的尾端進(jìn)行的線性表乍迄。

表尾稱為棧頂(Top),另一端稱為棧底(Bottom)闯两,當(dāng)棧中沒有數(shù)據(jù)元素時叫空棧(Empty Stack)

重要方法

1.Push()入棧 //添加數(shù)據(jù)

2.Pop()出棧 //刪除數(shù)據(jù)谅将,返回被刪除的數(shù)據(jù)

3.Peek()//取得棧頂?shù)脑丶⒈郏粍h除

4.Clear()//清空所有數(shù)據(jù)

5.Count //取得棧中元素的個數(shù)

棧的接口定義

public interface IStack{

int Count{get;}//求棧中元素個數(shù)

int GetLength();//求棧的長度

bool IsEmpty();//判斷棧是否為空

void Clear();//清空操作

void Push(T item);//入棧操作

T Pop();//出棧操作

T Peek();//取棧頂元素

}

用一片連續(xù)的存儲空間來存儲棧中的數(shù)據(jù)元素(使用數(shù)組)隅熙,這樣的棧稱為順序棧(Sequence Stack)。類似于順序表囚戚,用一維數(shù)組來存放順序棧中的數(shù)據(jù)元素狞洋。棧頂指示器 top 設(shè)在數(shù)組下標(biāo)為 0 的端吉懊, top隨著插入和刪除而變化假勿,當(dāng)棧為空時转培,top=-1浸须。

順序棧的實現(xiàn)

class SeqStack:IStack

???{

? ? ? private T[] data;

???????private int top;

???????public SeqStack(int size)

???????{

??????????? data = new T[size];

??????????? top = -1;

???????}

???????//默認(rèn)構(gòu)造數(shù)組的最大容量為10

???????public SeqStack():this(10)

???????{

???????}

???????public int GetLength()

???????{

??????????? return top + 1;

???????}

???????public int Count

???????{

??????????? get

??????????? {

??????????????? return GetLength();

??????????? }

???????}

???????public bool IsEmpty()

???????{

??????????? return top <= -1;

???????}

???????public void Clear()

???????{

??????????? top = -1;

??????????? Array.Clear(data,0,data.Length);

???????}

???????public void Push(T item)

???????{

??????????? data[top + 1] = item;

??????????? top++;

???????}

???????public T Pop()

???????{

??????????? T temp = data[top];

??????????? top--;

??????????? return temp;

???????}

???????public T Peek()

???????{

??????????? return data[top];

???????}

??? }

棧的另外一種存儲方式是鏈?zhǔn)酱鎯ι局希@樣的棧稱為鏈棧(Linked Stack)肌索。由于鏈棧的操作只是在一端進(jìn)行,為了操作方便晕换,把棧頂設(shè)在鏈表的頭部闸准,并且不需要頭結(jié)點梢灭。

鏈棧的實現(xiàn)

public class Node

{

???private T data; //數(shù)據(jù)域

???private Node next; //引用域

//構(gòu)造器

???public Node(T val, Node p)

???{

???????data = val;

???????next = p;

???}

//構(gòu)造器

???public Node(Node p)

???{

???????next = p;

???}

//構(gòu)造器

???public Node(T val)

???{

???????data = val;

???????next = null;

???}

//構(gòu)造器

???public Node()

???{

???????data = default(T);

???????next = null;

???}

//數(shù)據(jù)域?qū)傩?/p>

???public T Data

???{

???????get { return data; }

???????set { data = value; }

???}

//引用域?qū)傩?/p>

???public Node Next

???{

???????get { return next; }

???????set { next = value; }

???}

}

隊列(Queue)是插入操作限定在表的尾部而其它操作限定在表的頭部進(jìn)行的線性表。把進(jìn)行插入操作的表尾稱為隊尾(Rear)枣接,把進(jìn)行其它操作的頭部稱為隊頭(Front)缺谴。當(dāng)隊列中沒有數(shù)據(jù)元素時稱為空隊列(EmptyQueue)。

方法

1.Enqueue() 入隊(放在隊尾)

2.Dequeue() 出隊(移除隊首元素膀曾,并返回被移除的元素)

3.Peek() 取得隊首的元素阳啥,不移除

4.Clear() 清空元素

隊列接口定義

public interface IQueue<T>{

int Count{get;}//取得隊列長度的屬性

int GetLength();//求隊列的長度

bool IsEmpty();//判斷隊列是否為空

void Clear();//清空隊列

void Enqueue(T item);//入隊

T Dequque();//出隊

T Peek();//取隊頭元素

}

用一片連續(xù)的存儲空間來存儲隊列中的數(shù)據(jù)元素,這樣的隊列稱為順序隊列(SequenceQueue)斩狱。類似于順序棧所踊,用一維數(shù)組來存放順序隊列中的數(shù)據(jù)元素概荷。隊頭位置設(shè)在數(shù)組下標(biāo)為 0 的端误证,用 front 表示;隊尾位置設(shè)在數(shù)組的另一端遏考,用rear 表示改鲫。 front 和 rear 隨著插入和刪除而變化。當(dāng)隊列為空時稽亏, front=rear=-1缕题。

隊列的另外一種存儲方式是鏈?zhǔn)酱鎯Γ@樣的隊列稱為鏈隊列(LinkedQueue)瘪松。由于鏈隊列的操作只是在一端進(jìn)行,為了操作方便记罚,把隊頭設(shè)在鏈表的頭部桐智,并且不需要頭結(jié)點烟馅。

鏈隊列結(jié)點實現(xiàn)

public class Node

{

private T data; //數(shù)據(jù)域

private Node next; //引用域

//構(gòu)造器

public Node(T val, Node

p)

{

? data= val;

? next= p;

}

//構(gòu)造器

public Node(Node p)

{

? next= p;

}

//構(gòu)造器

public Node(T val)

{

? data= val;

? next= null;

}

//構(gòu)造器

public Node()

{

? data= default(T);

? next= null;

}

//數(shù)據(jù)域?qū)傩?/p>

public T Data

{

get

{

return data;

}

set

{

data = value;

}

}

//引用域?qū)傩?/p>

public Node Next

{

get

{

return next;

}

set

{

next = value;

}

}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市寡润,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌攻礼,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件知举,死亡現(xiàn)場離奇詭異雇锡,居然都是意外死亡锰提,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門边坤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谅年,“玉大人融蹂,你說我怎么就攤上這事∏” “怎么了约素?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵业汰,是天一觀的道長菩颖。 經(jīng)常有香客問我,道長晦闰,這世上最難降的妖魔是什么呻右? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任眉撵,我火速辦了婚禮纽疟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘憾赁。我一直安慰自己污朽,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布龙考。 她就那樣靜靜地躺著蟆肆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晦款。 梳的紋絲不亂的頭發(fā)上炎功,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音柬赐,去河邊找鬼亡问。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的州藕。 我是一名探鬼主播束世,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼锈死,長吁一口氣:“原來是場噩夢啊……” “哼其屏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蛤袒,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤珍德,失蹤者是張志新(化名)和其女友劉穎缩功,沒想到半個月后势木,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啦桌,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡又跛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了此熬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡鲫寄,死狀恐怖地来,靈堂內(nèi)的尸體忽然破棺而出币绩,到底是詐尸還是另有隱情芽突,我是刑警寧澤挟秤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布昔脯,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拐格。R本人自食惡果不足惜撞叨,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一靶瘸、第九天 我趴在偏房一處隱蔽的房頂上張望村生。 院中可真熱鬧卫病,春花似錦益咬、人聲如沸裆甩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽子房。三九已至,卻和暖如春奸笤,著一層夾襖步出監(jiān)牢的瞬間监右,已是汗流浹背称簿。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留频轿,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓赚窃,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子杉允,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法封恰,內(nèi)部類的語法麻养,繼承相關(guān)的語法,異常的語法诺舔,線程的語...
    子非魚_t_閱讀 31,639評論 18 399
  • 不講語言特性鳖昌,只從工程角度出發(fā),個人覺得C++標(biāo)準(zhǔn)委員會在C++11中對多線程庫的引入是有史以來做得最人道的一件事...
    stidio閱讀 13,301評論 0 11
  • VisuAlgo!一低飒,Date Structure的核心技術(shù)是分解和抽象二许昨,基本概念和常用術(shù)語 三,邏輯結(jié)構(gòu)1褥赊,邏...
    斜杠青年許晏銘閱讀 886評論 0 0
  • 張小龍在年初的一場演講中拌喉,提出了「應(yīng)用號」的概念速那,引起巨大反響。現(xiàn)在尿背,變身為「小程序」的應(yīng)用號端仰,等待各位的耕耘。接...
    c14328d5898b閱讀 790評論 0 5
  • 文/ 檐鈴化語 01 簡書,自從與你在朋友圈里驚鴻一瞥坞淮,上帝便在我耳邊輕輕說四個字:“在劫難逃茴晋!” 于是,我知道:...
    檐鈴化語閱讀 1,683評論 25 20