亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#數據結構之堆棧(Stack)實例詳解

2020-01-24 01:21:28
字體:
來源:轉載
供稿:網友

本文實例講述了C#數據結構之堆棧(Stack)。分享給大家供大家參考,具體如下:

堆棧(Stack)最明顯的特征就是“先進后出”,本質上講堆棧也是一種線性結構,符合線性結構的基本特點:即每個節點有且只有一個前驅節點和一個后續節點。

相對前面學習過的順序表鏈表不同的地方在于:Stack把所有操作限制在"只能在線性結構的某一端"進行,而不能在中間插入或刪除元素。下面是示意圖:

從示意圖中可以看出,堆棧有二種實現方式:基于數組的順序堆棧實現、類似鏈表的鏈式堆棧實現

先抽象堆棧的接口IStack:

namespace 棧與隊列{  public interface IStack<T>  {    /// <summary>    /// 返回堆棧的實際元素個數    /// </summary>    /// <returns></returns>    int Count();    /// <summary>    /// 判斷堆棧是否為空    /// </summary>    /// <returns></returns>    bool IsEmpty();    /// <summary>    /// 清空堆棧里的元素    /// </summary>    void Clear();    /// <summary>    /// 入棧:將元素壓入堆棧中    /// </summary>    /// <param name="item"></param>    void Push(T item);    /// <summary>    /// 出棧:從堆棧頂取一個元素,并從堆棧中刪除    /// </summary>    /// <returns></returns>    T Pop();    /// <summary>    /// 取堆棧頂部的元素(但不刪除)    /// </summary>    /// <returns></returns>    T Peek();  }}

順序堆棧(SeqStack)的實現:

using System;using System.Text;namespace 棧與隊列{  public class SeqStack<T>:IStack<T>  {    private int maxsize;    private T[] data;    private int top;        public SeqStack(int size)     {      data = new T[size];      maxsize = size;      top = -1;    }    #region //接口實現部分    public int Count()     {      return top + 1;    }    public void Clear()     {      top = -1;    }    public bool IsEmpty()     {      return top == -1;    }    public void Push(T item)    {      if (IsFull())      {        Console.WriteLine("Stack is full");        return;      }      data[++top] = item;    }    public T Pop()    {      T tmp = default(T);      if (IsEmpty())      {        Console.WriteLine("Stack is empty");        return tmp;      }      tmp = data[top];      top--;      return tmp;    }    public T Peek()    {      if (IsEmpty())      {        Console.WriteLine("Stack is empty!");        return default(T);      }      return data[top];    }    #endregion    public bool IsFull()     {      return top == maxsize - 1;    }    public override string ToString()    {      StringBuilder sb = new StringBuilder();      for (int i = top;i>=0;i--)      {        sb.Append(data[i] + ",");      }      return sb.ToString().Trim(',');    }      }}

鏈式堆棧(LinkStack)的實現

先定義節點Node.cs

namespace 棧與隊列{  public class Node<T>  {    private T data;    private Node<T> next;    public Node(T data, Node<T> next)     {      this.data = data;      this.next = next;    }    public Node(Node<T> next)     {      this.next = next;      this.data = default(T);    }    public Node(T data)     {      this.data = data;      this.next = null;    }    public Node()     {      this.data = default(T);      this.next = null;    }    public T Data {      get { return this.data; }      set { this.data = value; }    }    public Node<T> Next     {      get { return next; }      set { next = value; }    }  }}

下面是LinkStack.cs

using System;using System.Text;namespace 棧與隊列{  public class LinkStack<T>:IStack<T>  {    private Node<T> top;    private int num;//節點個數    /// <summary>    /// 頂部節點    /// </summary>    public Node<T> Top     {      get { return top; }      set { top = value; }    }    public LinkStack()     {      top = null;      num = 0;    }    public int Count()     {      return num;    }    public void Clear()     {      top = null;      num = 0;    }    public bool IsEmpty()     {      if (top == null && num == 0)      {        return true;      }      else      {        return false;      }    }    public void Push(T item)     {      Node<T> q = new Node<T>(item);      if (top == null)      {        top = q;      }      else      {        q.Next = top;        top = q;      }      num++;    }    public T Pop()     {      if (IsEmpty())       {        Console.WriteLine("Stack is empty!");        return default(T);      }      Node<T> p = top;      top = top.Next;      num--;      return p.Data;    }    public T Peek()     {      if (IsEmpty())       {        Console.WriteLine("Stack is empty!");        return default(T);      }      return top.Data;    }    public override string ToString()    {      StringBuilder sb = new StringBuilder();      if (top != null)       {        sb.Append(top.Data.ToString() + ",");        Node<T> p = top;        while (p.Next != null)        {                    sb.Append(p.Next.Data.ToString()+ ",");          p = p.Next;        }      }      return sb.ToString();    }  }}

測試代碼片段:

Console.WriteLine("順序堆棧測試開始...");SeqStack<int> seqStack = new SeqStack<int>(10);seqStack.Push(1);seqStack.Push(2);seqStack.Push(3);Console.WriteLine(seqStack);Console.WriteLine(seqStack.Peek());Console.WriteLine(seqStack);Console.WriteLine(seqStack.Pop());Console.WriteLine(seqStack);Console.WriteLine("鏈堆棧測試開始...");LinkStack<int> linkStack = new LinkStack<int>();linkStack.Push(1);linkStack.Push(2);linkStack.Push(3);Console.WriteLine(linkStack);Console.WriteLine(linkStack.Peek());Console.WriteLine(linkStack);Console.WriteLine(linkStack.Pop());Console.WriteLine(linkStack);Console.ReadLine();

注: .Net中System.Collections.Generic.Stack<T>已經提供了堆棧的基本實現,明白原理后,仍然推薦大家使用內置的實現。

希望本文所述對大家C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色哟哟亚洲精品一区二区| 久久全国免费视频| 国产精品444| 亚洲娇小xxxx欧美娇小| 欧美激情视频在线观看| 97超级碰碰人国产在线观看| 日韩乱码在线视频| 亚洲自拍欧美另类| 亚洲欧美精品在线| 欧美国产在线电影| 一区二区成人av| 国产精品福利在线| 精品久久久久久亚洲国产300| 91精品视频在线播放| 日韩av电影中文字幕| 国产精品成人一区| 在线精品视频视频中文字幕| 国产精品色婷婷视频| 欧美大奶子在线| 久久久久久91| 亚洲第一视频在线观看| 日韩美女在线观看| 欧美日韩精品在线视频| 国产精品扒开腿做| 亚洲精品日韩激情在线电影| 成人在线免费观看视视频| 亚洲精品国产欧美| 亚洲香蕉伊综合在人在线视看| 欧美一级淫片播放口| 欧美在线视频观看| 中文字幕亚洲精品| 欧美性20hd另类| 亚洲国产欧美一区二区丝袜黑人| 色偷偷av一区二区三区乱| 国产成人鲁鲁免费视频a| 日韩亚洲第一页| 这里只有视频精品| 国产精品毛片a∨一区二区三区|国| 日本亚洲欧美成人| 啊v视频在线一区二区三区| 亚洲va码欧洲m码| 91美女片黄在线观看游戏| 亚洲精品欧美极品| 欧美大尺度电影在线观看| 亚洲无限乱码一二三四麻| 日韩av不卡在线| 国产精品久久久久久久天堂| 亚洲欧美福利视频| 国产激情综合五月久久| 97超级碰碰人国产在线观看| 欧美一级大片在线观看| 色噜噜亚洲精品中文字幕| 久久偷看各类女兵18女厕嘘嘘| 九九热精品在线| 国产日韩欧美在线播放| 中文字幕欧美精品日韩中文字幕| 国产精品免费久久久久影院| 狠狠色狠色综合曰曰| 久久精品在线视频| 亚洲天堂精品在线| 国产精品一区二区三区毛片淫片| 久久综合五月天| 亚洲视频在线视频| 国产热re99久久6国产精品| 国产精品一区久久久| 国产成人久久精品| 日韩欧美一区二区三区久久| 精品国产一区二区三区在线观看| 国产99视频在线观看| 精品国产一区二区三区久久久| 国产精品久久久av| 欧美综合一区第一页| 久久久久这里只有精品| 一区二区日韩精品| 欧美激情综合色综合啪啪五月| 国产精品com| 国产一区二区三区视频在线观看| 久久久久久久香蕉网| 一本色道久久综合狠狠躁篇的优点| www.国产一区| 91av在线播放| 久久躁狠狠躁夜夜爽| 成人精品视频99在线观看免费| 欧美另类xxx| 亚洲天堂男人天堂女人天堂| 亚洲第一精品夜夜躁人人躁| 日韩av免费观影| 日本午夜精品理论片a级appf发布| 欧美电影免费观看电视剧大全| 欧美极品在线播放| 国产精品丝袜视频| 成人黄色av免费在线观看| 精品国产乱码久久久久久天美| 国产精品电影网站| 欧美精品在线视频观看| 国产精品自产拍在线观看中文| 日韩精品中文字幕久久臀| 91精品国产91久久久久久久久| 91精品国产免费久久久久久| 日韩成人在线视频网站| 91中文精品字幕在线视频| 国产精品自拍网| 91香蕉电影院| 亚洲变态欧美另类捆绑| 岛国视频午夜一区免费在线观看| 精品福利樱桃av导航| 国产精品福利观看| 欧美精品在线免费观看| 中文字幕亚洲专区| 国产精品美女主播在线观看纯欲| 91青草视频久久| 亚洲一区第一页| 日韩精品中文字幕视频在线| 国产精品高潮呻吟久久av无限| 91精品在线一区| 97久久久免费福利网址| 成人欧美一区二区三区黑人| 亚洲va码欧洲m码| 国产午夜一区二区| 亚洲字幕在线观看| 日韩中文在线观看| 国产精品极品尤物在线观看| 国产日韩av在线播放| 亚洲男人av电影| 91po在线观看91精品国产性色| 亚洲一区二区三区四区在线播放| 色噜噜狠狠色综合网图区| 亚洲精品99久久久久中文字幕| 成人免费看黄网站| 亚洲国产精彩中文乱码av| 91久久久在线| 国产精品美女免费看| 91精品国产91久久久久久吃药| 亚洲精品国产电影| 色综合老司机第九色激情| 亚洲精品一区中文字幕乱码| 国产精品午夜国产小视频| 亚洲三级av在线| 欧美黑人xxxⅹ高潮交| 成人免费xxxxx在线观看| 欧美成人精品在线视频| 不用播放器成人网| 国产成人av在线播放| 亚洲午夜精品久久久久久久久久久久| 26uuu日韩精品一区二区| 黄色一区二区三区| 色噜噜狠狠狠综合曰曰曰88av| 亚洲美女久久久| 国产在线拍偷自揄拍精品| 国产亚洲精品久久久久久777| 亚洲第一页在线| 国产精品劲爆视频| 亚洲精品一区久久久久久| 中文字幕精品视频| 亚洲欧美自拍一区| 国产成人一区二区三区小说| 777午夜精品福利在线观看| 中文字幕在线看视频国产欧美在线看完整| 精品国产福利视频| 91精品视频播放| 欧美极品美女视频网站在线观看免费| 欧美精品一区三区| 成人精品久久久| 欧美日韩亚洲一区二区|