实现效果
线性表,线性表是指数据元素按顺序排列的一种数据结构,下面这些东西可以说都是线性表,所以用array实现三者一点问题都没有
分别是List动态数组,stack栈和queue队列,今天就秒掉stack
栈:先进后出
实现思路
用数组表示的话,只需要给最后一位打个标记不就行了
当我压栈(添加元素)的时候,把标记后移,再添加元素
弹栈的时候把标记前移,原来的元素我直接不管了,等待下一次压栈的时候就直接给他覆盖了
想明白了就直上代码
无需注意前面的方法,只需看最下面的Arr2stack类即可
public class Arr2Stack : MonoBehaviour {
Arr2stack arr = new Arr2stack(new int[10]); // 初始化一个大小为10的栈
void Update() {
// 检测数字键按下
for (int i = 0; i <= 9; i++) {
if (Input.GetKeyDown(i.ToString())) {
arr.Push(i);
Debug.Log($"压入了数字: {i}");
}
}
// 检测Backspace键按下
if (Input.GetKeyDown(KeyCode.Backspace)) {
int poppedValue = arr.Pop();
Debug.Log($"弹出了数字: {poppedValue}");
}
}
}
public class Arr2stack {
int[] arr;
int top = -1;
public Arr2stack(int[] arr) {
this.arr = new int[arr.Length];
for (int i = 0; i < arr.Length; i++) {
this.arr[i] = arr[i];
}
}
public void Push(int value) {
if (top < arr.Length - 1) {
arr[++top] = value;
}
else {
Debug.Log("栈已满,无法压栈");
}
}
public int Pop() {
if (top == -1) {
Debug.Log("栈为空,无法出栈");
return 0;
}
Debug.Log($"弹出了{arr[top]}");
return arr[top--];
}
}