国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 學院 > 邏輯算法 > 正文

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

2024-09-08 23:18:40
字體:
來源:轉載
供稿:網友


一: 概念

         棧,同樣是一種特殊的線性表,是一種Last In First Out(LIFO)的形式,現實中有很多這樣的例子,

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

 

二:存儲結構

        ”?!安幌瘛标犃小埃枰獌蓚€指針來維護,棧只需要一個指針就夠了,這得益于棧是一種一端受限的線性表。

      這里同樣用”順序結構“來存儲這個”?!?,top指針指向棧頂,所有的操作只能在top處。

         

代碼段:

復制代碼 代碼如下:

#region 棧的數據結構
    /// <summary>
/// 棧的數據結構
/// </summary>
    public class SeqStack<T>
    {
        public T[] data;

        /// <summary>
/// 棧頂指針
/// </summary>
        public int top = -1;

        public SeqStack(int lenth)
        {
            data = new T[lenth];
        }
    }
    #endregion


三:常用操作

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

1: 初始化棧

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

代碼段:

復制代碼 代碼如下:

#region 棧的初始化操作
        /// <summary>
/// 棧的初始化操作
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
        public SeqStack<T> SeqStackInit<T>(int length)
        {
            SeqStack<T> seqStack = new SeqStack<T>(length);

            seqStack.top = -1;

            return seqStack;
        }
        #endregion

2:入棧

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


代碼段:

復制代碼 代碼如下:

#region 入棧
        /// <summary>
/// 入棧
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="seqStack"></param>
/// <param name="data"></param>
        public void SeqStackPush<T>(SeqStack<T> seqStack, T data)
        {
            if (SeqStackIsFull(seqStack))
                throw new Exception("不好意思,棧溢出");

            seqStack.data[++seqStack.top] = data;
        }
        #endregion

3:出棧

      同樣跟“入棧”類似,需要做兩件事情,①干掉top處的元素,②top指針自減。

代碼段

復制代碼 代碼如下:

#region 出棧
        /// <summary>
/// 出棧
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="seqStack"></param>
/// <returns></returns>
        public T SeqStackPop<T>(SeqStack<T> seqStack)
        {
            if (SeqStackIsEmpty(seqStack))
                throw new Exception("嗚嗚,棧已空");

            seqStack.data[seqStack.top] = default(T);

            return seqStack.data[--seqStack.top];
        }
        #endregion

4:獲取棧頂元素

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

代碼段

復制代碼 代碼如下:

#region 獲取棧頂
        /// <summary>
/// 獲取棧頂
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="seqStack"></param>
/// <returns></returns>
        public T SeqStackPeek<T>(SeqStack<T> seqStack)
        {
            if (SeqStackIsEmpty(seqStack))
                throw new Exception("棧已空");

            return seqStack.data[seqStack.top];
        }
        #endregion

總的運行代碼如下

復制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SeqStack
{
    class Program
    {
        static void Main(string[] args)
        {
            SeqStackClass stackManager = new SeqStackClass();

            SeqStack<Student> seqStack = stackManager.SeqStackInit<Student>(10);

            Console.WriteLine("********************  壓入ID=1,ID=2,ID=3的元素  ***********************/n");
            //壓入ID=1,ID=2,ID=3的元素
            stackManager.SeqStackPush(seqStack, new Student() { ID = 1, Name = "一線碼農", Age = 23 });
            stackManager.SeqStackPush(seqStack, new Student() { ID = 2, Name = "huangxincheng520", Age = 23 });
            stackManager.SeqStackPush(seqStack, new Student() { ID = 3, Name = "51cto", Age = 23 });

            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.WriteLine("棧頂元素為:ID=" + seqStack.data[i].ID + ",Name=" + seqStack.data[i].Name + ",Age=" + seqStack.data[i].Age);
            }

            Console.Read();
        }
    }

    #region 學生數據實體
    /// <summary>
/// 學生數據實體
/// </summary>
    public class Student
    {
        public int ID { get; set; }

        public string Name { get; set; }

        public int Age { get; set; }
    }
    #endregion

    #region 棧的數據結構
    /// <summary>
/// 棧的數據結構
/// </summary>
    public class SeqStack<T>
    {
        public T[] data;

        /// <summary>
/// 棧頂指針
/// </summary>
        public int top = -1;

        public SeqStack(int lenth)
        {
            data = new T[lenth];
        }
    }
    #endregion

    public class SeqStackClass
    {
        #region 棧的初始化操作
        /// <summary>
/// 棧的初始化操作
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
        public SeqStack<T> SeqStackInit<T>(int length)
        {
            SeqStack<T> seqStack = new SeqStack<T>(length);

            seqStack.top = -1;

            return seqStack;
        }
        #endregion

        #region 判斷棧是否為空
        /// <summary>
/// 判斷棧是否為空
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="seqStack"></param>
/// <returns></returns>
        public bool SeqStackIsEmpty<T>(SeqStack<T> seqStack)
        {
            return seqStack.top == -1;
        }
        #endregion

        #region 清空棧
        /// <summary>
/// 清空棧
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="seqStack"></param>
        public void SeqStackClear<T>(SeqStack<T> seqStack)
        {
            seqStack.top = -1;
        }
        #endregion

        #region 棧是否已滿
        /// <summary>
/// 棧是否已滿
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="seqStack"></param>
        public bool SeqStackIsFull<T>(SeqStack<T> seqStack)
        {
            return seqStack.top == seqStack.data.Length;
        }
        #endregion

        #region 入棧
        /// <summary>
/// 入棧
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="seqStack"></param>
/// <param name="data"></param>
        public void SeqStackPush<T>(SeqStack<T> seqStack, T data)
        {
            if (SeqStackIsFull(seqStack))
                throw new Exception("不好意思,棧溢出");

            seqStack.data[++seqStack.top] = data;
        }
        #endregion

        #region 出棧
        /// <summary>
/// 出棧
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="seqStack"></param>
/// <returns></returns>
        public T SeqStackPop<T>(SeqStack<T> seqStack)
        {
            if (SeqStackIsEmpty(seqStack))
                throw new Exception("嗚嗚,棧已空");

            seqStack.data[seqStack.top] = default(T);

            return seqStack.data[--seqStack.top];
        }
        #endregion

        #region 獲取棧頂
        /// <summary>
/// 獲取棧頂
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="seqStack"></param>
/// <returns></returns>
        public T SeqStackPeek<T>(SeqStack<T> seqStack)
        {
            if (SeqStackIsEmpty(seqStack))
                throw new Exception("棧已空");

            return seqStack.data[seqStack.top];
        }
        #endregion

        #region 獲取棧中元素個數
        /// <summary>
/// 獲取棧中元素個數
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="seqStack"></param>
/// <returns></returns>
        public int SeqStackLen<T>(SeqStack<T> seqStack)
        {
            return seqStack.top + 1;
        }
        #endregion
    }
}



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
黄色av电影在线播放| 亚洲欧美中文字幕在线观看 | 开心丁香婷婷深爱五月| 四虎精品视频| 尤物视频在线观看| 国产精品冒白浆免费视频| 国产美女免费观看| 中文字幕在线播放网址| 国产经典av| 国产天堂在线观看| gogogogo高清视频在线| 中文日本在线观看| 丁香视频五月| 超碰人人在线| 国产乱子视频| 国产高清一级片| 中文字幕av网| 超碰人人在线| 国产一二三视频| 在线观看电影av| 久艹在线视频| 国产传媒在线播放| 中文字幕网在线| 国产一二三视频| 精品一二三区视频| 日本免费黄色| 国产区在线视频| 国产盗摄精品一区二区酒店| 羞羞视频在线观看免费| 日本中文字幕在线视频| 国产盗摄一区二区| 青草在线视频在线观看| 最新天堂资源在线资源| 91这里只有精品| 开心丁香婷婷深爱五月| 2018中文字幕在线观看| 久久久久久久久久久久久91| 国产福利小视频在线观看| 91xx在线观看| 精品全国在线一区二区| 国产永久免费高清在线观看| 99福利在线| 97中文字幕| 午夜视频在线免费| 日p在线观看| 亚洲免费国产| 精品推荐国产麻豆剧传媒| 国产麻豆一区二区三区精品 | 国产在线视频精品视频免费看| av片在线观看永久免费| 国产三级香港三韩国三级| wwww亚洲| 久久久久久91精品色婷婷| 欧美日韩**字幕一区| 中文天堂av| 99re在线视频| 999在线视频| 国产va在线| 精品亚洲综合| 精品av中文字幕在线毛片| 国产精品视频白浆合集| 粉嫩av一区| 激情亚洲综合网| 久久久久久五月天久久久久久久久| www免费在线观看| 久久er视频| 久久99亚洲网美利坚合众国 | 亚洲成人国产综合| аⅴ成人天堂中文在线| 青青青青在线| 成在在线免费视频| 亚洲国产日韩成人综合天堂| 香蕉视频网站在线观看| 国产在线一二| 麻豆国产在线播放| 97影院秋霞午夜在线观看| 亚洲视频网站在线| 人人干在线视频| 五月亚洲综合| 精品成人免费自拍视频| 亚洲精品在线播放视频| 六月天色婷婷| 国产精品爱久久久久久久小说| 在线中文字幕视频观看| 国产免费黄网站| 精品视频麻豆入口| 久久五月精品| 国产成a人亚洲精v品| 免费男女羞羞的视频网站中文字幕| 久热中文字幕精品视频在线| 国产精品扒开做爽爽爽的视频| 日本片在线看| 国产对白国语对白| 美女免费视频黄| 91麻豆精品国产91久久| 国产免费av高清在线| 在线播放国产区| 中中文字幕av在线| 欧美性xxxx交| 性色视频在线| 2019中文字幕视频| 国产视频中文字幕在线观看| 日韩中文字幕久久久经典网| 精品亚洲综合| 国产对白国语对白| 国产麻豆综合视频在线观看| 一个人看的www免费观看视频| 国产激情视频网址| 国产精品666| 中文字幕在线视频免费观看| 久久久久久久久亚洲精品| 日本高清中文字幕在线| 国产毛片毛片毛片| 国产丝袜自拍| av一级在线| 在线播放av网站| av高清在线| 在线国产一区二区三区| 在线中文字幕视频观看| 97一区二区三区| 国产黄色免费看| 2021天堂中文幕一二区在线观| 最近中文字幕mv2018在线高清 | 久热免费在线视频| 高潮白浆视频| 综合蜜桃精品| 最近中文字幕mv免费高清在线| 最新天堂资源在线资源| 国产桃色电影在线播放| 国产精品免费视频一区一| 国产极品嫩模在线视频一区| 91欧美在线视频| www中文字幕在线观看| www.操操操.com| 国产女人在线视频| 中文字幕在线影院| 精品亚洲综合| 青青青手机在线视频观看| 国产嫩草在线视频| 国产高清在线视频| 日本久久网站| 国产亚洲精品一区二区在线观看| 在线中文字幕视频观看| 国产在线高清| 69日小视频在线观看| 另类综合图区| 国产综合视频一区二区三区免费| 91精品大全| 天天爱天天做色综合| 中文字幕2019第三页| 波多野结衣中文字幕久久| 国产美女视频网站| 992tv在线观看在线播放| 久热免费在线视频| 国产成人高清精品| www在线播放| 国产在线视频福利| 天天插天天色| 国产一级免费在线观看| av色在线观看| 国产国产人免费人成免费视频| 啪啪免费视频一区| 国产精品99爱免费视频| 九色视频网站| av丝袜在线| 在线观看中文字幕| 国产一级免费看| 国产免费电影网站入口| www久久日com| 亚洲天堂久久久| 国产成人综合美国十次| 午夜不卡视频| 开心快乐六月丁香婷婷| 四虎国产精品永久在线| 国产精品剧情一区二区三区| 尤物免费看在线视频| 超碰国产在线观看| 日本三级视频网站| 91三级在线| 九九热免费视频| 欧美xxxxx性| 欧美日韩久久中文字幕| 一二三四区在线观看| 在线观看中文字幕的网站| 91国内精品在线视频| 91麻豆福利| 99福利在线| 日本在线观看| 最近高清中文在线字幕在线观看| 国内自拍视频在线看免费观看| 国产三区视频在线观看| 精品麻豆国产| 四虎成人欧美精品在永久在线| 天天激情综合| 最近中文字幕mv2018在线高清 | 国产专区在线播放| 国产激情二区| 午夜在线观看91| 国产无套粉嫩白浆在线2022年| 国产日韩欧美第一页|