数据结构—————栈(unity)

最近有老铁跟我讲自己对数据结构不熟悉,而且市面上一些学习资料比较难理解,让我给他讲一下数据结构,我考虑了一下,决定在接下来的日子,开启一个新的工程,用我们熟悉的unity把涉及到的数据结构都讲一下,其中我会附带一些简单的例子,或者一些小游戏,来说明数据结构,希望能帮助大家更好的理解。这一篇我先讲比较简单常用的数据结构——栈:

我们先看看百度百科的解释:

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

要搞清楚这个概念,首先要明白”栈“原来的意思,如此才能把握本质。"栈“者,存储货物或供旅客住宿的地方,可引申为仓库、中转站,所以引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈的说法。

一直往瓶子里面装东西,取出来的时候,只有先把最上面的东西取出来,才能取到底部的东西

下面我写一个简单的例子来理解一下这个栈,生成几个球,想象是在一个瓶子里,我们一个个取出小球:

自己试验一下,下面是代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class StackManager : MonoBehaviour
{
    [SerializeField] private Button delete_btn;
    [SerializeField] private GameObject ball;
    private Stack<GameObject>myStack=new Stack<GameObject>();
	// Use this for initialization
	void Start () {
	    for (int i = 0; i < 5; i++)
	    {
	        GameObject go = Instantiate(ball, new Vector3(0, i, 0), gameObject.transform.rotation);
            myStack.Push(go);
	    }
        delete_btn.onClick.AddListener(() =>
        {
            if (myStack.Count > 0)
            {
                GameObject top_go = myStack.Pop();
                Destroy(top_go);
            }
           
        });
	}
	
	// Update is called once per frame
	void Update () {
		
	}
}

push是入栈:

pop是取栈顶元素,并删除,还有一个方法是peek也是取栈顶元素,但是不删除

最后我把例子工程上传了github:  https://github.com/Leemu0822/UnityDataStruct

会一直更新,把所有常用的数据结构都会写一个例子出来,持续更新,希望对大家有用:

如果需要python写的兄弟,可以给我留言

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值