00:00
哈喽,大家好,欢迎来到二师兄讲堂,那么今天呢,给大家介绍一下什么是数据结构,以及数据结构中的占什么样的啊,我简单去介绍一下,那么首先呢,先了解一下什么是数据结构吧,那么数据结构啊,其实就是我们带有结构特性的一些数据元素的一个集合,我们都知道我们写代码的时候可以用一个啊,列表啊,数组啊去包容一些数数据,对吧?那么在包容的时候呢,其实这个包容的容器它就是数据结构啊,其实广义上来讲呢,我们可以把数据结构分成几个部分啊,可以分成逻辑结构和存储结构来讲,那么关于逻辑结构呢,可以把它分成线性结构和非线性结构,那么线性呢,就是像线性表啊,站啊,队列啊,数组啊等等的这些东西呢,它们是有一定线性关系的,那么这个线性关系就是表示着,哎,当有一个元素出去了之后呢,那么后面的元素,它这它这个前后的关系啊,是固定的啊,所这是线性结构,那么什么是非线性结构呢?非线性结构就是说它们不存在一个啊,就是严格意义上的一个线性关系,像树啊,图啊,它们是有一些分支的,是有一些其他联系的,那么这个就是分线非线性结构啊。那么第二个呢,就是关于存储结构啊,存储结构呢,就是根据这个啊结构的一个存储方式的一个不同,可以分为四点,可以有顺序结构,链式结构,索引结构和散列结构啊,那么到后面我们遇到的时候呢,会慢慢去了解什么是啊这种机械结构。
01:12
那么好了,那我们先了解一下现象结构中的一个站啊,我们了解一下什么是线性结构,再了解一下什么是占。那么现在结构呢,就是像我刚才说的一样,当元素被移除的时候呢,或者说被添加的时候呢,我们原来原来这个前后顺序啊是不变的,那比如说现在我们有元素啊,现在像这样,那么有元素1234可以这样吧,然后呢,现在有一个哎,有一个五添加在这了,那你可以看到啊,这个五是后来的,那么之前的这个三和四呢,是四在后边,三在前面是吧,它的顺序还是这样,还是三在四的前面对吧?那么所以说这个顺序是不变的,当它在移出去之后呢,还是不变的是吧?那么他们啊,这整体的结构是不变的情况下呢,就可以把它叫做是线性数据结构啊,是这样。那么好啦,刷了这个线性数据结构之后呢,咱们来来看一下什么是战啊,其实占呢,就是一个有序的一个集合,那么它主要的一个一个特点呢,就在于它这儿啊,它的一个排序的原则叫做哎,Last in first out,也就是后进先出的原则,后进来的原元素,哎,它先出去啊我们来看一下站具体是怎么一回事啊,通过一个画图给大家演示一下,那么现在假设呢,我们有一些元素有A,有B,有C,那么这样呢,其实就是这样的一个结构啊,它可以把它写成像水桶一样的一个,但是这个水桶呢,它是分层的,它有很多的层,那么现在呢,我们要把这个元素存到这个站中啊,这个站怎么办呢?首先呢,把C拿进来,拿来之后啊,那么C进入在这个桶中的时候,它肯定是要往下沉,沉到最底才可以,对吧,所以说它要放到这个位置啊,把C放到这个位置,那么再往下呢,我可以把B也一样一样的一个方式把它放进来,对吧?那么B同理可以放在这个位置,因为最下面的位置C已经占了,所以说我们B只能放在这了,对吧?那么再往下呢,我们还可以把A进行一个A放置,那么把A呢,可以放到这个位置。
02:54
质,那么同理,以后再有元素呢,可以继续往上放,对吧?那么放完了之后呢,我们可以发现ABC大概是成这么一个状态,那么好了,这是放放置的一个过程,我们现在想把它拿出去怎么办?拿出去的时候你会发现哎,CB压在底下了,那么正常情况下,我们在生活中被压在底下的东西是不是也没有办法直接拿出去啊,对吧?那么此时呢,我们拿出的办法只有一个,就是把这个元素啊,依次从上面往下去拿啊,那么拿的时候,第一个我们可以把A拿出去,A放到这个位置,这是A,然后A拿出去之后,这是空的了,那么B是不是也可以同理去把它拿出来呀,那么B再拿出,放到这个位置,这就是B,那么C啊也一样,同样的原理呗,放到这,这就是C,那么这样的话呢,就形成了我们这个站的一个原理啊,叫后进先出,你会发现刚才A是最后进来的,那么出的时候A是最先出去的,对吧?那么这个就是站的一个简单的一个原理实现啊,就这样的,那么好了,大家可以看一下我画的这个图啊,这个图也是一样的,我们可以由A1 a2 a3 a41直到an把它入站,入站的时候呢,肯定。
03:55
是ae到达底部对吧?那么出站的时候呢,肯定是最后进的这个an先出站对吧?那么这是原理,那么除了原理之外呢,这个站啊有很多的名词,那么像这个过程呢,叫入站,那么出的过程呢叫出站,那么顶部的元素呢叫占顶啊,底部的元素呢叫占底,这就是站的一个基本的一个结构,就是这样的。
04:15
那么好了,结构了也了解了之后呢,我们再来看一下占怎么通过这个Python代码去实现啊,那么其实无论是什么代码也好,实验的原理都是一样的啊,我们都是通过这个代码的底层去写的,我们先来看一下,那么在写站的时候呢,可以有很多东西啊出首先我们要初始化一个站,那么用Python来讲呢,我们就可以用这个列表去把这个站做一个初始化啊,用列表去当做存储的容器,我们用一些功能呢,去实现入站出站的一些呃操作啊这样,那么首先呢,第一个我们可以去实现一下这个判断站是否为空的,如果站是空的,那么是不是我们也知道了,哎,放入的第一个元素就会放到站的一个底部,对吧?那么这一块呢,就是实现我们这个站的一个入站出站操作啊,我们都知道列表是不是a pad和pop方法呀,A pad就是在末尾追加元素,那么pop呢,就是把末尾的元素再删出去,对吧?那么你末尾追加了之后呢,是后进的,那我再把你末尾的删出去之后呢,是不是也是一个后进先出的一个原理啊,那么这个就是通过这个a pod去实现入站,通过pop去实现出站啊,要记住pop里边不用去添加任何的一个呃参数,直接把它进行pop,就删除最后的一个元素了,那么这就是我们进行入站和出站的一个操作,然后再往下呢,还可以写出两个功能,一个是返回站点的元素,一个是返回站中的一个数目啊,当然站点的元素很简单啊,我们这个站整体是多长,那么我。
05:32
哦哦,我们这个占啊,它整体有多,我们这个占啊,它一共占几个空间,那把就是最上面空间这个元素给它返回就可以了呗,就是返回占点元素啊,直接通过return就可以实现,然后最后一个呢,就是返回我们这个占中元素的一个数目,那么这个其实也很好做啊,我们只需要返回我当前这个列表,或者说当前这个占整体的一个长度,用一个烂函数就可以去找到,对吧?那么这个呢,就是返回占中元素数目的一个操作,那么好了,那么这些这个简单的实现我们就实现好了,之后呢,我们可以看一下它是怎么去运行的,怎么去执行的,执行的结果又是怎么样的,我们可以起来看一下,那么首先呢,我们可以去push I push I push I like,呃,Push like push Python是吧?那么push了这三个东西之后呢,这个占中就会依次有三个东西,一个是I一个是like,一个是Python,那么根据之前我们所掌握的原理,是不是应该I先进去了,然后再进去like,然后再进去Python,对吧?那么当我们进行一个呃出战的时候,是不是最先pop的应该是我们这个Python对吧?那么pop之后你想一下我们现在流程啊,先一个。
06:33
入站入站再入站,然后泡泡,那么是不是Python就被删掉了,就被这个出战了对吧?那么现在如果我想返回站点的元素,是不是理应把这个站点的元素应该是返回的是like呀,因为我们这个Python已经被呃弹出了对吧?或者被出站了对吧?那么好了,我们来看一下现在这个原理是不是对的呢?先把这个运行一下,然后再把这个运行一下,诶可以看到啊,占点元素它就是like,那么此时哎,它的一个大小是多少呢?它的这个整个占的数目又是多少呢?我们也可以看一下啊,可以看到运行一下,哎,占的数目就是二,因为我们现在只剩下I和LIKE2个元素是吧?那么所以说呢,这个占的整体的一个数目呢,就是两个了,那么好啦,这个是简单的一个站的实现以及原理的一个讲解啊,那么我们下节再见吧。
我来说两句