C#用链表和数组分别实现堆栈

1.链表
实现栈的四个基本功能 入栈 出栈 长度 栈顶值

public class 基础 : MonoBehaviour
{
    public class MyStack
    {
    	//定义每一个元素的数据结构 
    	//下一个元素 和 该元素的值
        public class StackData
        {
            public StackData next;
            public object data;
            public StackData(StackData next, object data)
            {
                this.next = next;
                this.data = data;
            }
        }
        //记录数量
        int size;
        //代表栈顶元素  
        StackData top;
        public void Push(object data)
        {
        	//因为栈是先进后出 后进来的元素就成为了栈顶
        	//所以每压入一个元素 就让后进来元素的next指向前一个元素
        	//出栈时 丢失最后节点的引用即可
            top = new StackData(top, data);
            size++;
        }
        public object Pop()
        {
        	//弹出栈顶元素 同时下一个元素就是新栈顶
            object result = top.data;
            top = top.next;
            size--;
            return result;
        }
        public int Count
        {
            get
            {
                return size;
            }
        }
        public object Peek()
        {
            if (top == null) return null;
            return top.data;
        }
    }
    private void Start()
    {
        MyStack ms = new MyStack();
        ms.Push(1);
        ms.Push(2);
        ms.Push(3);
        ms.Push(4);
        ms.Push(5);
        Debug.Log(ms.Pop());
        Debug.Log(ms.Pop());
        Debug.Log(ms.Count);
        Debug.Log(ms.Peek());
    }
}

2.数组
(1)数组就是会更麻烦一点 不过可以加深对数组和栈的理解
(2)Pop和Enlarge 核心就是数组满了以后 创建一个新数组 将旧书组中的元素放入新数组 然后再将新数组赋值给旧数组即可
(3)栈是先进后出 所以只需要着重处理数组的末尾索引即可

public class 基础 : MonoBehaviour
{
    public class MyStack<T>
    {
        //通过数组实现堆栈
        public T[] list;
        public int maxSize = 2;
        public int nowSize = 0;
        public MyStack()
        {
            list = new T[maxSize];
        }
        public int Count    
        {
            get
            {
                return nowSize;
            }
        }
        public void Push(T data)
        {
            if(maxSize >= nowSize + 1)
            {
                list[nowSize++] = data;
            }
            else
            {
                Enlarge();
                list[nowSize++] = data;
            }
        }

        public T Pop()
        {
            if(nowSize > 0)
            {
                T[] list3 = new T[maxSize];
                T temp = list[--nowSize];
                for (int i = 0; i < list.Length - 1; i++)
                {
                    list3[i] = list[i];
                }
                list = list3;
                return temp;
            }
            else
            {
                return default(T);
            }
        }
        public void Enlarge()
        {
            T[] list2 = new T[maxSize * 2];
            for(int i = 0; i < list.Length; i++)
            {
                list2[i] = list[i];
            }
            list = list2;
            maxSize *= 2;
        }
    }
    private void Start()
    {
        MyStack<int> ms = new MyStack<int>();
        ms.Push(1);
        ms.Push(2);
        ms.Push(3);
        ms.Push(4);
        ms.Push(5);
        Debug.Log(ms.Pop());
        Debug.Log(ms.Count);
    }
}

相关推荐

  1. C#数组分别实现堆栈

    2024-07-09 23:08:06       24 阅读
  2. C语言实现

    2024-07-09 23:08:06       53 阅读
  3. 数据结构:顺序实现通讯录(上)

    2024-07-09 23:08:06       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-09 23:08:06       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 23:08:06       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 23:08:06       58 阅读
  4. Python语言-面向对象

    2024-07-09 23:08:06       69 阅读

热门阅读

  1. Go bytes包

    2024-07-09 23:08:06       25 阅读
  2. C#面 :ASP.Net Core中有哪些异常处理的方案?

    2024-07-09 23:08:06       25 阅读
  3. Redis

    2024-07-09 23:08:06       26 阅读
  4. 大语言模型应用--AI工程化落地

    2024-07-09 23:08:06       21 阅读
  5. 64.ThreadLocal造成的内存泄漏

    2024-07-09 23:08:06       23 阅读
  6. 实例分割:深度学习在图像识别中的突破

    2024-07-09 23:08:06       25 阅读
  7. el-table 树状表格展开及折叠

    2024-07-09 23:08:06       24 阅读
  8. pytorch LLM训练过程中的精度调试实践

    2024-07-09 23:08:06       19 阅读
  9. 【TORCH】神经网络权重初始化和loss为inf

    2024-07-09 23:08:06       18 阅读
  10. k8s-第九节-命名空间

    2024-07-09 23:08:06       25 阅读