原文在我自己的博客里,小伙伴们也可以点击阅读原文跳转查看,还有好听的背景音乐哦,背景音乐取消了~2333333线性表什么是线性表?它是一个连续或不连续存储的数组。这里的连续和不连续是指物理内存空间中线性表的元素是否连续。连续数组对应内置数组的实现,不连续数组对应指针的实现。这种方法也称为链表实现。也就是说,线性表有两种实现,一种是内置数组实现,一种是链表实现。下面我们就来看看哪些数据结构属于线性表吧!栈(stack)特性先进后出只有一个入口和出口简介栈(stack),又称堆栈,是一种有限操作的线性表。限制是插入和删除操作只允许在表的一端进行。这一端称为栈顶,另一端称为栈底。向栈中插入一个新元素也称为压入、压入或压入。就是将新元素放到栈顶元素的最上面,使其成为新的栈顶元素;从堆栈中删除元素也称为入栈或出栈。unstack,就是删除栈顶元素,让相邻的元素成为新的栈顶元素。通过上面的话,相信就不难理解栈的概念了。我们从上图来看栈和push和pop:在上图中我们可以看到stack和pop的实际情况。只有一个entry(gap),在这个gap处,进行push和pop操作。现实生活中一个更形象的比喻是砌砖。砖块是一层层叠起来的,拿的时候也是从上面拿,一直到最下面的最后一块。PHP实现了PHP,也可以实现一个简单的栈。由于PHP并没有提供很好的操作指针的方法,所以只能通过数组的方式来实现。只需使用两个函数,它们是array_push和array_poparray_push将一个或多个元素压入数组的末尾(入栈);array_pop弹出数组的最后一个元素(出栈)简单代码示例:$arr=[];array_push($arr,1);//$arr[]=1;print_r($arr);sleep(1);array_push($arr,2);//$arr[]=2;print_r($arr);睡眠(1);array_push($arr,3);//$arr[]=3;print_r($arr);睡眠(1);$val=array_pop($arr);echo$val。"\n\n";print_r($arr);sleep(1);$val=array_pop($arr);echo$val。"\n\n";print_r($arr);把这段代码放到cli下,就可以看到效果了。看一下运行gif:从命令行的执行结果看,我们先把1、2、3三个值依次压入栈中,后面取出来的时候,我们也跟着栈的先进后出和后进先出的特点就是出栈。队列(queue)的特点先进先出两个间隙,一个入口,一个出口简介队列(queue)是一种抽象的数据结构,采用先进先出(FIFO)策略。它的思想来源于生活中的排队策略。生活中一个更形象的比喻是排队。PHP的实现也是一样的,队列在PHP中也可以用数组的形式来实现。array_push和array_shiftarray_push这两个函数将一个或多个元素压入数组的末尾(入队列);array_shift将数组开头的元素移出数组(移出队列)可以发现array_push和上面的stackpush是同一个函数,但是两个函数的作用是一样的。此处用于表示加入团队。简单代码示例:header("Content-type:text/html;charset=utf-8");$arr=[];echo'Enqueue-1array_push($arr,1)'。"\n";array_push($arr,1);//$arr[]=1;print_r($arr);sleep(1);echo'enqueue-2array_push($arr,2)'."\n";array_push($arr,2);//$arr[]=2;print_r($arr);sleep(1);echo'enqueue-3array_push($arr,2)'."\n";array_push($arr,3);//$arr[]=3;print_r($arr);sleep(1);echo'queue-3array_shift($arr)'."\n";$val=array_shift($arr);回显$val。"\n\n";print_r($arr);sleep(1);echo'queue-2array_shift($arr)'。"\n";$val=array_shift($arr);echo$val。"\n\n";print_r($arr);说明:从命令行的执行结果可以看出,我们依次输入1、2、3三个值,先输出1出队列时,再出2.符合我们队列的特点,先进先出,后进先出。单向链表的特征是由每个节点组成的。每个节点都包含指向下一个节点(*next)的指针。单链表的介绍是一种链式访问的数据结构。一组具有任意地址的存储单元用于存储线性列表中的数据。元素。链表中的数据由节点表示。每个节点的组成是:元素(数据元素的图像)+指针(表示后续元素的存储位置)。元素是存储数据的存储单元,指针是连接每个节点的地址数据链表,由两个重要的部分组成:指针指向下一个节点的地址,(即直接地址内存位置)节点链表中的组件。对于单向链表,一个节点包含节点数据和下一个节点。在一个节点的指针图中,我们可以看到单向链表由一个头指针、一个头节点、n个元素节点和一个尾节点组成。头指针表示,根据这个指针,我们可以找到链表对应的头节点,用来存放链表的一些信息,比如链表的长度,头节点指针指向的是第一个元素节点,每个节点包含节点数据(data),就像一个指针(*next指向下一个元素节点),直到结束节点为null。双向链表的特点与单向链表类似。它由一个个节点组成。与单向链表的区别在于每个节点包含数据(data)上一个节点的指针(*prev)和下一个节点的指针(*next)引入双向链表,也称为双向链表;与单向链表不同的是,每个节点有两个指针,一个指向前一个节点,一个指向后一个节点。通过这两个指针,我们可以方便地通过某个节点访问两个相邻(后面)的节点。我们看一下双向链表的图:图中我们可以看到,除了头节点和尾节点外,每个中间节点都与每个节点首尾相接,每个节点都保存了前一个节点的指针和指向下一个节点的指针,这是与单向链表的区别。注意:我们也可以构造一个双向循环链表;尾节点的next指针*next指向头节点,头节点的*prev指向尾节点;这样就形成了一个双向循环链表;如下图所示,我们只需要把双向链表简单修改一下就可以了:综上所述,就是本文介绍的内容。数据结构很多,非常高深,其中的算法知识也是层出不穷。
