2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
1. Verknüpfte Liste
Implementieren Sie die vier Grundfunktionen des Stapels: Push- und Pop-Länge, Stack-Top-Wert
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.Array
(1) Arrays sind etwas problematischer, können aber Ihr Verständnis von Arrays und Stapeln vertiefen.
(2) Der Kern von Pop and Enlarge besteht darin, ein neues Array zu erstellen, wenn das Array voll ist, die Elemente in der alten Buchgruppe in das neue Array einzufügen und dann das neue Array dem alten Array zuzuweisen.
(3) Der Stapel wird zuerst eingegeben und zuletzt ausgegeben, sodass Sie sich nur auf den Endindex des Arrays konzentrieren müssen.
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);
}
}