您的位置:首页 > 房产 > 家装 > C#用链表和数组分别实现堆栈

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

2025/2/24 3:46:14 来源:https://blog.csdn.net/m0_70388078/article/details/140211183  浏览:    关键词: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);}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com