数据结构——栈

 原文:http://www.cnblogs.com/skywang12345/p/3562239.html

栈的介绍

栈(stack),是一种线性存储结构,它有以下几个特点:
(01) 栈中数据是按照"后进先出(LIFO, Last In First Out)"方式进出栈的。
(02) 向栈中添加/删除数据时,只能从栈顶进行操作。

栈通常包括的三种操作:pushpeekpop
push -- 向栈中添加元素。
peek -- 返回栈顶元素。
pop  -- 返回并删除栈顶元素的操作。

 

1. 栈的示意图

栈中的数据依次是 30 --> 20 --> 10

 

2. 出栈

出栈前:栈顶元素是30。此时,栈中的元素依次是 30 --> 20 --> 10
出栈后:30出栈之后,栈顶元素变成20。此时,栈中的元素依次是 20 --> 10

 

3. 入栈

入栈前:栈顶元素是20。此时,栈中的元素依次是 20 --> 10
入栈后:40入栈之后,栈顶元素变成40。此时,栈中的元素依次是 40 --> 20 --> 10

 

 

1. .NET实现一:数组实现的栈,能存储任意类型的数据

 

    /// <summary>
    /// 数组实现的栈,能存储任意类型的数据
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class GeneralArrayStack<T>
    {

        private  const int DEFAULT_SIZE = 12;
        private T[] mArray;
        private int count;

        public GeneralArrayStack()
        {
            // 不能直接使用mArray = new T[DEFAULT_SIZE];
            mArray = (T[])Array.CreateInstance(typeof(T), DEFAULT_SIZE);
            count = 0;
        }

        public GeneralArrayStack(int size)
        {
            // 不能直接使用mArray = new T[DEFAULT_SIZE];
            mArray = (T[])Array.CreateInstance(typeof(T), size);
            count = 0;
        }

        // 将val添加到栈中
        public void push(T val)
        {
            mArray[count++] = val;
        }

        // 返回“栈顶元素值”
        public T peek()
        {
            return mArray[count - 1];
        }

        // 返回“栈顶元素值”,并删除“栈顶元素”
        public T pop()
        {
            T ret = mArray[count - 1];
            count--;
            return ret;
        }

        // 返回“栈”的大小
        public int size()
        {
            return count;
        }

        // 返回“栈”是否为空
        public bool isEmpty()
        {
            return size() == 0;
        }

        // 打印“栈”
        public void PrintArrayStack()
        {
            if (isEmpty())
            {
                Console.WriteLine("stack is Empty");
            }

            Console.WriteLine($"stack size(){size()}");

            int i = size() - 1;
            while (i >= 0)
            {
                Console.WriteLine(mArray[i]);
                i--;
            }
        }

    }

 

 

 

1 tmp=30
2 tmp=20
3 stack size()=3
4 40
5 20
6 10
View Code

结果说明GeneralArrayStack是通过数组实现的栈,而且GeneralArrayStack中使用到了泛型。

 

2. .NET实现二:Collection集合 中自带的"栈"(stack)的示例

 

       int tmp1 = 0;
            Stack<int> astack1 = new Stack<int>();
            // 将10, 20, 30 依次推入栈中
            astack1.Push(10);
            astack1.Push(20);
            astack1.Push(30);
            // 将“栈顶元素”赋值给tmp,并删除“栈顶元素”
            tmp1 = astack1.Pop();
            //System.out.printf("tmp=%d\n", tmp);
            // 只将“栈顶”赋值给tmp,不删除该元素.
            tmp1 = astack1.Peek();
            //System.out.printf("tmp=%d\n", tmp);
            astack1.Push(40);
            while (astack1.Count > 0)
            {
                tmp1 = astack1.Pop();
                Console.WriteLine($"tmp1={tmp1}");
            }

 

 

运行结果

tmp=40
tmp=20
tmp=10

 

 
 
posted @ 2019-02-17 00:51  luanxm  阅读(364)  评论(0编辑  收藏  举报