• 数据结构之栈


    栈:是一种先进后出的线性表,只能在栈顶(表尾)进行插入删除操作。

    数组栈  

    通过下面代码可以看出来,栈只是用了动态数组的其中几个方法,只能在尾部进行添加删除操作,是功能受限一种数组结构。所以只能在栈顶进栈顶出。

    namespace DataStructure
    { 
       /// <summary>
        /// 定义一个栈接口, 
        /// </summary>
        /// <typeparam name="E"></typeparam>
        interface IStack<E>
        {
            int Count { get; }
            bool IsEmpty { get; }
            void Push(E e);
            E Pop();
            E Peek(); 
        }
    
        /// <summary>
        /// 数组栈
        /// </summary>
        /// <typeparam name="E"></typeparam>
        class ArrayIStack<E> : IStack<E>
        {
            //存入的一个数组
            private MyArray<E> arr;
            /// <summary>
            /// 创建指定长度的数组
            /// </summary>
            /// <param name="capacity"></param>
            public ArrayIStack(int capacity)
            {
                arr = new MyArray<E>(capacity);
            }
            /// <summary>
            /// 创建默认长度的数组
            /// </summary>
            ///  
            public ArrayIStack()
            {
                arr = new MyArray<E>();
            }
    
            public int Count
            {
                get { return arr.Count; }
            }
    
            public bool IsEmpty
            {
                get { return arr.IsNull; }
            }
    
            /// <summary>
            /// 获取尾部的元素
            /// </summary>
            /// <returns></returns>
            public E Peek()
            {
                return arr.GetLast();
            }
    
            public E Pop()
            {
              return  arr.RemoveLast();
            }
            /// <summary>
            /// 添加元素:因为数组只有在尾部添加元素,耗费时间最少
            /// 所以将元素从尾部添加
            /// </summary>
            /// <param name="e"></param>
            public void Push(E e)
            {
                arr.AddLast(e);
            }
     
        }
    }

    链表栈

       #region 链表栈
    
        class LinkedListIStack<E> : IStack<E>
        {
            /// <summary>
            /// 当前链表
            /// </summary>
            private MyLinkedList<E> list;
            public LinkedListIStack()
            {
                list = new MyLinkedList<E>();
            }
    
            public int Count
            {
                get { return list.Count; }
            }
    
            public bool IsEmpty
            {
                get
                {
                    return list.IsEmpty;
                }
    
            }
            /// <summary>
            /// 获取栈顶元素()
            /// 和数组不同的是,单链表获取表头元素时最快,所以这里使用链表中获取头部元素的方法
            /// </summary>
            /// <returns></returns>
            public E Peek()
            {
                return list.GetFirst();
            }
            /// <summary>
            /// 出栈操作
            /// </summary>
            /// <returns></returns>
            public E Pop()
            {
                return list.RemoveFirst();
            }
    
            public void Push(E e)
            {
                list.AddFirst(e);
            }
        }
    
        #endregion

     从上面的代码我们可以分析出,不管是数组栈还是链表栈,这几个方法都是最优的。

  • 相关阅读:
    Jmeter 跨脚本入参
    Jmeter 查看结果树显示unicode转中文
    jmeter+ant 接口自动化测试框架
    jmeter jmeter.results.shanhe.me.xsl 模板内容
    Jmeter + ant 接口自动化测试(进阶)
    Linux od命令
    Hadoop初识
    tbn tbc tbr
    ffmpeg之avcodec_open2
    ffmpeg之AVStream
  • 原文地址:https://www.cnblogs.com/anjingdian/p/15173210.html
Copyright © 2020-2023  润新知