![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 68
牧码文
只要思想不滑坡,从此不怕bug多
展开
-
【python】pandas模块使用总结
pands在日常数据处理中的使用方法总结了七大类,如果更详细的使用说明和更全面的函数说明可以浏览官网:https://pandas.pydata.org/使用pandas可以大大提高数据处理的效率和准确性,特别是在数据预处理、建模和报表制作等方面。它是数据科学的核心之一,非常值得学习和掌握。它类似于Excel或SQL表格。pandas中的loc和iloc都是用于选取数据的方法,但两者的使用方式、效果和用途有些不同。在使用pandas时,我们通常需要进行的操作包括读取数据、数据清洗、数据分析和数据可视化等。原创 2023-03-15 22:51:45 · 1374 阅读 · 0 评论 -
动态规划题:最长回文子串、接雨水、正则匹配
返回一个二维数组,代表了不同开始和结束的组合是否为回文子串。如果一个字符串:abcba。判断一个回文子串的方法。原创 2022-10-05 16:00:52 · 191 阅读 · 0 评论 -
三道动态规划题-最长的有效括号、组合总和I、组合总和II
这种需要的是监测")“,比如i的位置是”)“,那么i-1的位置如果是”(",就说明这个i位置长度为2,然后去看是否有i-2位置,然后加上i-2位置的数就是结果。和上个题目不同,使用简单的递归+回溯的时候,会存在有重复结果的情况,比如[3,4], target = 7,那么,得到的结果就是[3,4],[4,3],造成了重复。给定一组数字,不重复,给定一个target,有多少组合使得他们的和为target,数组中的数字可以重复使用。2.rest原创 2022-09-30 02:07:49 · 452 阅读 · 0 评论 -
算法必备—动态规划详解,从递归到动态规划
动态规划从简单的地方说起,最初的时候可以理解为循环问题,就是常说的递归,我们仔细的想一想,如果一个问题能够使用递归得到解,那么只要在递归过程中有重复的计算,都可以换做动态规划来解决。那么在每次调用的时候,方法中都夹带着这个缓存表,如果调用的方法已经被计算过了,就从缓存表里拿结果,如果没有,就计算。可以将递归理解为栈结构,当主递归进去后,就是方法入栈,一直递归调用,知道最后一个递归方法全部进栈,开始出栈回溯。上述的递归解法中,因为在递归调用的过程中,会存在重复计算的过程,所以使用一个缓存表,记录每次的结果。原创 2022-09-04 21:49:33 · 1135 阅读 · 0 评论 -
剑指offer03:找出数组中重复的数字,ArrayList和HashMap的使用区别及源码分析
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:限制:今天在刷算法题的时候,刷到了一道剑指offer,题目难度为简单,但是里面有些东西确实我之前没有注意过的。现在梳理一下先讲一下这道题,题目很简单,判断数组中有重复的数字,可能存在多个解首先这个题目我看到之后的反应,因为没有提到数组是有序的,所以只能是循环遍历,如果有重复的就返回即可,无重复接着遍历下一个。问原创 2022-07-10 15:49:00 · 224 阅读 · 0 评论 -
常见面试题:链表5-删除链表的倒数第n个节点(双指针j解法)
常见面试题:链表5-删除链表的倒数第n个节点删除第n个节点很容易想到,删除倒数第n个节点怎么做?如果看到倒数这样的字眼,链表中可以考虑到的思路就是:双指针、栈一、描述给定一个链表,删除链表的倒数第 n 个节点并返回链表的头指针例如给出的链表为: 1→2→3→4→5, n= 2.删除了链表的倒数第 nn 个节点之后,链表变为1→2→3→5.数据范围: 链表长度 0≤n≤1000,链表中任意节点的值满足 1000≤val≤100要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)原创 2022-05-25 09:49:11 · 128 阅读 · 0 评论 -
常见面试题:链表4-返回链表倒数k个节点(快慢指针、栈、暴力解法)
常见面试题:链表4-返回链表倒数k个节点(快慢指针、栈、暴力解法)面试题中,链表的常问问题还有返回链表倒数k个节点,如果放在数组中,很容易实现,放在链表中,就需要通过一些方法了一、解法1:暴力解法首先能想到的就是类似于数组的结构,先求出链表的长度,然后判断要找的k个是否超过了链表的长度,最后找到第k个节点返回public ListNode FindKthToTail (ListNode pHead, int k) { int len = getNodeLength(pHead); //原创 2022-05-24 09:59:35 · 142 阅读 · 0 评论 -
常见面试题:链表3-判断链表是否有环以及环入口节点
常见面试题3:链表-判断链表是否有环以及环入口节点内容目录常见面试题3:链表-判断链表是否有环以及环入口节点一、判断链表是否有环1.解法1:使用列表2.解法2:快慢指针二、链表环入口节点解法1:使用列表解法2:快慢指针链表可以分为单向链表、双向链表、环形链表。对于环形链表,如果我们事前不知道,遍历的时候就会出现死循环,导致程序失败。那么如何判断链表是否有环以及环入口节点也是面试中经常问到的一、判断链表是否有环能想到的解法大概有两种,第一种就是把每次遍历的结果放到一个链表中,每次遍历的时候判断该链原创 2022-05-23 08:59:21 · 274 阅读 · 0 评论 -
算法面试题:合并有序链表系列(合并两个,合并n个)分治算法
算法面试题:合并有序链表系列(合并两个,合并n个)内容目录算法面试题:合并有序链表系列(合并两个,合并n个)一、合并两个有序链表方法1方法2:二、合并n个有序链表分治解法:合并有序链表问题,可以分为两种,一种是合并两个有序链表,另一种是合并n个有序链表一、合并两个有序链表合并两个链表,可以想到的方法大概分为两种一种是开辟一个空间,逐渐比较两个链表,小的放到空间中,以此类推一种是不开辟另外的空间,直接使用list1或者list2方法1public ListNode Merge(ListNo原创 2022-05-22 09:58:57 · 1740 阅读 · 0 评论 -
链表之反转链表,万金油的解题方法(java求解)
链表之反转链表,一招鲜吃遍天(java求解)链表的反转一类的算法题,在面试中经常被问,题目的花样也很多,整体反转、部分反转、分组反转等等。这类题的解法也是有很多种,递归、指针等等。对于这种题,最核心的地方就是反转的逻辑怎么处理,其他的比如整体、部分这些,通过循环就可以解决。解题万金油反转的逻辑怎么写?很简单,记得一个就可以:实例化一个空节点newHead,指向head实例一个cur,作为newHead的下一个节点实例一个cur_next,作为cur的next另cur.next = c原创 2022-05-18 09:40:58 · 257 阅读 · 2 评论 -
图解LeetCode19:删除链表的倒数第 N 个结点
19. 删除链表的倒数第 N 个结点内容目录19. 删除链表的倒数第 N 个结点一、题目解析1、删除链表指定节点2、计算链表长度二、解题三、测试代码给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。一、题目解析这就是一个简单地数据结构问题,关于链表地问题,就是删除链表地指定节点。唯一区别就是题目中给定的是将其倒数的位置节点删除1、删除链表指定节点所以问题就转变为了删除链表的指定节点,链表的指定节点删除只需要把3.next=4.next即可,就把3的下一个节点指向5publi原创 2022-01-07 10:27:56 · 578 阅读 · 6 评论 -
数据结构-二分查找法-java实现
内容目录数据结构-二分查找法-java实现一、基本思想二、代码实现1、递归法2、循环求解数据结构-二分查找法-java实现一、基本思想二分查找是远近闻名的查找大法之一,其主要的思路和我们小时候经常玩的猜数字是一样的,就比如给你一组数字[1,2,3,4,5,6,7,8,9],要猜到的数字是5你第一次猜了2,小伙伴告诉你小了,然后你就会从[2,3,4,5,6,7,8,9]中在猜一个数字你第二次踩了6,小伙伴告诉你大了,然后你就会从[2,3,4,5]中猜一个数字你第三次猜了3,小伙伴告诉你小了,然后原创 2022-01-06 22:26:29 · 513 阅读 · 2 评论 -
数据结构-链表-Java实现
Java实现链表数据结构链表又可以分为单向链表、双向链表、环形链表一、单向链表在单向链表中,第一个节点是链表头指针,指向最后一个节点的指针设为None,表示它是链表尾,不指向任何地方建立链表首先需要定义一个类,该类就是链表上的各节点,类中有一个属性为链表下一指针,指向下一个节点,默认为nullclass Node { private int num = 0; private Node next = null;}完成之后就是链表的设计,首先需要指定链表头,可以实例一个对象,原创 2021-11-25 14:50:53 · 621 阅读 · 0 评论 -
数据结构-查找-哈希查找法
哈希查找法哈希法(或称散列法)这个主题通常和查找法一起讨论,主要原因是哈希法不仅用于数据的查找,在数据结构的领域中,还能将它应用在数据的建立、查找、删除与更新中例如符号表在计算机上的应用领域很广泛,包含汇编程序、编译程序、数据库使用的数据字典等,都是利用提供的名称来找到对应的属性。符号表按其特性可以分为两类:静态表(Static Table)和动态表(Dynamic Table)。而“哈希表”则是属于静态表中的一种,是将相关的数据和键值存储在一个固定大小的表格中哈希法简介基本上,哈希法就是将本身的键原创 2021-07-03 12:04:52 · 1363 阅读 · 0 评论 -
数据结构-查找-斐波那契查找法
斐波拉契查找法斐波拉契查找法和二分法一样都是以分割范围来进行查找的,不同的是斐波拉契查找法不以对半分割而是以斐波拉契级数的方式分割。斐波拉契级数F(n)的定义如下:F0=0,F1=1Fi=Fi-1 + Fi-2,i≥2斐波拉契查找法的好处是只用到了加减运算而不需用到乘除运算,这从计算机运算的过程来看,效率会高于前两种查找法。在尚未介绍斐波拉契查找法之前,先来认识斐波拉契查找树。所谓斐波拉契查找树,是以斐波拉契级数的特性来建立的二叉树,其建立的原则如下:斐波拉契树的左右子树均为斐波拉契树当数据原创 2021-07-03 12:03:05 · 960 阅读 · 0 评论 -
数据结构-查找-插值查找法
插值查找法插值查找法又叫做插补查找法,是二分查找法的改进版。它是按照数据位置的分布,利用公式预测数据所在的位置,再以二分法的方式渐渐逼近。使用插值法是假设数据平均分布在数组中,而每一项的差距相当接近或有一定的距离比例。插值法的公式为:Mid = low + ((key - data[low]) / (data[high] - data[low])) * (high - low)其中Key是要查找的键值,data[high],data[low]是剩余待查找记录中的最大值和最小值,假设数据项为n,其插值查原创 2021-07-02 14:30:03 · 1933 阅读 · 1 评论 -
数据结构-查找-顺序查找法
在数据处理的过程中,是否能在时间内查找到所需要的数据是一个相当值得重视的问题。所谓查找(search),指的是在数据文件中找出满足某些条件的记录。用以查找的条件称作为“键值(Key)”,就如同排序所用的键值一样。常见的查找方法根据数据量的大小,我们可以将查找分为内部查找和外部查找内部查找:数据量较小的文件可以一次性全部加载到内存中进行查找外部查找:数据量大的文件无法一次性加载到内存中处理,而需要使用辅助存储器来分次处理如果从另一个角度来看,查找的技巧又可以分为“静态查找”和“动态查找”两种原创 2021-07-02 13:19:38 · 3623 阅读 · 1 评论 -
数据结构-查找-二分查找法
二分查找法如果要查找的数据已经实现拍好了顺序,就可以使用二分查找法来进行查找。二分查找法是将数据分割成两等分,再比较键值与中间值的大小,如果键值小于中间值,就可以确定要查找的数据在前半段,否则在后半段。如此分割直到找到或者确定不存在为止。例如,已排序的数列为2,3,5,8,9,11,12,16,18,而所需查找的是11时:首先跟第5个值9比较数列内容2358911121618因为11>9,所以和后半部分中间值12比较数列内容原创 2021-07-02 13:18:11 · 724 阅读 · 0 评论 -
数据结构-排序-基数排序法
基数排序法基数排序法和我们之前所讨论的排序法不太一样,它并不需要进行元素间的比较操作,而是属于一种分配模式排序方式基数排序法按比较的方向可以分为最高位优先(Most Significant Digit First,MSD)和最低位优先(Least Signigicat Digit First,LSD)两种。MSD法是从最左边的位数开始比较,而LSD则是从最右边的位数开始比较。以LSD为例对三位数的整数进行排序原始数据原始数据599573460168原创 2021-06-26 18:52:44 · 250 阅读 · 0 评论 -
数据结构-排序-堆积排序法
堆积排序法堆积排序法是选择排序法的改进版,它可以减少在选择排序法中的比较次数,进而减少排序时间。堆积排序法用到了二叉树的技巧,它是利用堆积数来完成排序的。堆积树是一种特殊的二叉树,可以分为最大堆积树和最小堆积树两种。最大堆积树它是一个完全二叉树所有节点的值都大于或者等于它左右子节点的值树根是堆积树中最大的最小堆积树它是一个完全二叉树所有节点的值都小于或等于它左右子节点的值树根是堆积树中最小的在排序之前,需要将二叉树转换成堆积树,转化步骤:假设data=[32、17、16、24、原创 2021-06-26 18:07:24 · 851 阅读 · 2 评论 -
算法的基础知识-时间复杂度
算法基础知识算法定义算法(Algorithm)这个单词最早出现在波斯数学家阿勒花刺子密在公元825年所写的《印度数学算术》中。如今普遍认可的对算法的定义是:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作算法的特性输入输出这个比较容易理解,算法具有零个或者多个输入有穷性有穷性是指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成确定性算法的每一步骤都具有确定的含义,不会出现二义性。原创 2021-06-26 00:08:20 · 399 阅读 · 0 评论 -
数据结构-排序-快速排序
快速排序快速排序法又称分割交换排序法,是目前公认的速度最快的排序法,该方法是现在数据中找到一个虚拟的中间值,然后将大于这个中间值的放到右边,小于中间值的放到左边,然后将数组以该中间值分为两组,左边和右边逐步重复上述操作,直到排序完成为止。操作和分割步骤入下:假设数组有n项R1,R2,R3…Rn,其相应的键值为K1,k2,k3…kn;先假设K的值为第一个键值,将其设置为第一次的中间值将数组从左向右找到键值Ki,使得Ki>K将数组从右向左找到键值Kj,使得Kj<K如果i<j,对调原创 2021-06-25 22:16:25 · 385 阅读 · 1 评论 -
数据结构-排序-合并排序
合并排序法合并排序法(Merge Sort)的工作原理是针对已经排好的两个或者两个以上的数列(或数据文件),通过合并的方式将其组合成一个大的且已经排好序的数列(或数据文件),步骤如下:将N个长度为1的键值成对的合并成N/2个长度为2的键值组将N/2个长度为2的键值组成对地合并成N/4个长度为4的键值组将键值组不断地合并,知道合并成一组长度为N的键值组为止合并排序法的分析使用合并排序法,n项数据一般需要约logn次处理,每次处理的时间复杂度O(n),所以合并排序法的最佳情况、最差情况及平均情原创 2021-06-25 20:04:15 · 417 阅读 · 2 评论 -
python设计插入排序法
插入排序法插入排序法(Insert Sort)是将数组中的元素逐一与已经排序好的数据进行比较,前两个元素先排好,再将第三个元素插入适当的位置,所以这三个元素仍然是已经排序好的,接着将第四个元素加入,重复此步骤,直到排序完成为止。比如:55,23,87,62,16第一步:加入55第一步55第二步:加入23,放在55前面第二步2355第三步:加入87,放在55后面第三步235587原创 2021-06-06 20:10:53 · 224 阅读 · 3 评论 -
python设计选择排序法
选择排序法选择排序法(Selection Sort)可以使用两种方式排序,即在所有的数据中,当大到小排序时,将最大值放大第一个位置,当从小到大排序时,将最大值放入到最后一个位置,就这样的方式循环遍历,循环交换,以此重复,直到排序完成为止原始数据5523876216第一次排序:找到最小值与第一个交换第一次1623876255第二次排序:找到最小值与第二个交换第二次1623876255原创 2021-06-06 20:09:46 · 86 阅读 · 0 评论 -
python设计冒泡排序
冒泡排序法冒泡排序又称为交换排序法,是从观察水中气泡变化构思而成的,原理是从第一个元素开始,比较相邻元素的大小,若大小有误,则对调后再进行下一个元素的比较,就仿佛气泡逐渐从水底升到水面上一样。如此扫描完一次之后,就可以确保最后一个元素位于正确的顺序。接着逐步进行第二次扫描,直到完成所有元素的排序关系为止冒泡分析法:最后的情况个平均情况均需比较(n-1)+(n-2)+(n-3)+…+3+2+1=n(n-1)/2次;事件复杂度为O(n^2),最好的情况只需完成一次扫描,发现没有执行数据的交换操作,就表示原创 2021-06-06 20:08:39 · 120 阅读 · 3 评论 -
数据结构-图形结构
数据结构-图形结构树形结构的最大不同就是描述节点与节点直接“层次”的关系,但是图形结构却是讨论两个顶点之间“连通与否”的关系,如果为图形中连接两顶点的边填上加权值,这类图形就称为“网络”图形简介图形理论时欧拉为了解决“哥白尼堡”问题所想出来的一种数据结构理论,这就是著名的“七桥问题”欧拉环与欧拉链欧拉当时使用的方法就是以图形结构来进行分析的。他以顶点表示城市,以边表示桥梁,并定义了连接每个顶点的边数,称为该顶点的度数。欧拉最后得出一个结论:当所有顶点的度数都为偶数时,才能从某顶点出发,经原创 2021-05-30 19:33:51 · 2588 阅读 · 0 评论 -
数据结构-图形结构-生成树和图的最短路径
生成树生成树又称“花费树”“成本树”或者“值树”,一个图的生成树就是以最少的边来连通图中所有的顶点,且不造成回路的属性结构。更清楚的说,当一个图连通时,使用深度优先遍历(DFS)或广度优先遍历(BFS)必能访问图中所有的顶点,且G=(V,E)的所有边可以分为两个集合:T和B(T为搜索时经过的所有边,而B为其余未被经过的边)。if S = (V,T)为G中的生成树,具有以下3项性质:E = T + B如果加入B中的任一边到S中,就会产生回路V中的任何2个顶点Vi、Vj在S中存在唯一的一..原创 2021-05-30 19:29:04 · 528 阅读 · 0 评论 -
数据结构-图形结构-图的遍历
图的遍历树的遍历目的是访问树的每一个节点一次,可用的方法有中序法、前序法、后序法三种。至于图的遍历,可以定义如下:一个图G=(V,E),存在某一定点v属于V,我们希望从v开始,通过此节点相邻的节点而去访问图G中的其他节点,这就被称为“图的遍历”。就是从某一个顶点V1开始,遍历可以经过V1到达的顶点,接着遍历下一个顶点直到全部的顶点遍历完毕为止。在遍历的过程中可能会重复经过某些顶点和边。通过图的遍历可以判断该图是否连通,并找出连通分支和路径。图遍历的方法有两种:深度优先遍历和广度优先遍历。深度..原创 2021-05-30 19:26:09 · 531 阅读 · 0 评论 -
数据结构-图形结构-图的数据表示
树形结构的最大不同就是描述节点与节点直接“层次”的关系,但是图形结构却是讨论两个顶点之间“连通与否”的关系,如果为图形中连接两顶点的边填上加权值,这类图形就称为“网络”图形简介图形理论时欧拉为了解决“哥白尼堡”问题所想出来的一种数据结构理论,这就是著名的“七桥问题”欧拉环与欧拉链欧拉当时使用的方法就是以图形结构来进行分析的。他以顶点表示城市,以边表示桥梁,并定义了连接每个顶点的边数,称为该顶点的度数。欧拉最后得出一个结论:当所有顶点的度数都为偶数时,才能从某顶点出发,经过每条边一次,再回到原创 2021-05-30 19:24:14 · 1058 阅读 · 0 评论 -
数据结构-树形结构
数据结构-树形结构首先,什么是树形结构,简单地说,树形结构就是你现在想的那样的结构,数据结构像树形的就是树形结构,典型的树形结构示例:Windows操作系统和Unix操作系统和文件系统均是树形结构的应用。树的基本概念**树(Tree)**是一个由一个或者一个以上的节点(Node)组成的,存在一个特殊的节点,称为树根(Root),Root很熟悉吧,Linux的根目录。每个节点是一些数据和指针组合而成的记录ABCDA为根节点,B、C、D均是A的子节点树还可以组成森林原创 2021-05-22 18:02:26 · 6916 阅读 · 0 评论 -
数据结构-二叉树-二叉树的遍历
二叉树的遍历线性数组或链表只能单向从头到尾遍历或者反向遍历。所谓二叉树的遍历简单的来说就是访问树中所有的节点各一次,并且在遍历后,将树中的数据转化为线性关系。二叉树可以将每个节点分为左右两个分支二叉树的特性一律从左向右遍历,那么遍历的方式就分为了三种,分别是中序遍历:左子树->树根->右子树前序遍历:树根->左子树->右子树后序遍历:左子树->右子树->树根这三种方式的顺序也十分好记,简单来说“从左向右,树根最牛”,意思就是所有遍历的顺序都是从左向右,树根原创 2021-05-19 20:08:26 · 314 阅读 · 0 评论 -
数据结构-树形结构和二叉树的建立
数据结构-树形结构首先,什么是树形结构,简单地说,树形结构就是你现在想的那样的结构,数据结构像树形的就是树形结构,典型的树形结构示例:Windows操作系统和Unix操作系统和文件系统均是树形结构的应用。树的基本概念**树(Tree)**是一个由一个或者一个以上的节点(Node)组成的,存在一个特殊的节点,称为树根(Root),Root很熟悉吧,Linux的根目录。每个节点是一些数据和指针组合而成的记录ABCDA为根节点,B、C、D均是A的子节点树还可以组成森林原创 2021-05-18 15:28:04 · 228 阅读 · 1 评论 -
数据结构-队列
数据结构-队列队列是一种先进先出的数据机构,和堆栈一样都是一种有序的线性表的抽象数据结构堆栈可以看做是类似于往米缸里放米的“先进后出”的数据结构,而队列就是一种类似与排队检票的“先进先出”的数据结构在堆栈中我们只需要定义一个top来标记堆栈最顶端的数据,而在队列中需要定义两个属性:front和rear两个指针(或称为游标)来标记最前和最后的两个元素,分别指向队列的最前端和最尾端队列的基本操作队列是一种抽象数据结构,具有一下特性:具有先进先出的特性拥有两个基本操作,即加入和删除,而且使用f原创 2021-05-16 15:16:01 · 199 阅读 · 2 评论 -
数据结构-堆栈
数据结构-堆栈堆栈(Stack)是一组相同数据类型的组合,具有“后进先出”的特性,所有的操作均在顶端进行。堆栈的简介“后进先出”可以看做是往米缸里放米,先放进去的后吃,后放进去的在顶端先吃。堆栈是一种抽象数据结构(ADT,Abstract Data Type),具有下列特性:只能从堆栈的顶端存取数据数据的存取符合后进先出的原则堆栈的基本运算有5种:create创建一个空堆栈push把数据存压入堆栈顶端,并返回新堆栈pop从堆栈顶端弹出数据,并返回新堆栈原创 2021-05-15 18:39:07 · 4040 阅读 · 1 评论 -
数据结构-链表-双向链表
数据结构-链表-双向链表单向链表和环形链表都是属于拥有方向性的链表,只能单向遍历,如果由于某种原因造成了某个连接断裂,那后面的链表数据便会遗失而无法复原。所以,我们可以将两个方向不同的链表结合起来,除了存放数据的字段之外,它还有两个指针变量,除了类似于单向链表的下一个指针next外,还需要一个指针指向上一个数据,这样的链表就是双向链表(Double Linked List)由于每个节点都有两个指针,可以双向通行,因此可以轻松地找到前后节点,同时从链表中任意的节点都可以找到其他节点,而不需要经过反转或者对原创 2021-05-13 12:47:32 · 4127 阅读 · 1 评论 -
数据结构-链表-环形链表
数据结构-链表-环形链表环形链表就是将单链表的尾部指向头部,从而形成一个单方向的环形结构,环形链表中每个元素都可以是head,也都可以是尾部,这样就不用担心链表头指针遗失的问题,而且在遍历链表的时候可以在任一节点来遍历其他节点环形链表的建立class student: def __init__(self): self.name = '' self.no = '' self.next = None head = student() #新增链表头元素 ptr原创 2021-05-12 13:50:03 · 588 阅读 · 1 评论 -
数据结构-链表-单向链表
数据结构-链表-单向链表链表(Linked List)是由许多相同数据类型的数据按特定顺序排列而成的线性表。一个单向链表节点基本上是由两个元素(数据字段和指针)所组成的,而指针将会指向下一个元素在内存中的地址在单向链表中,第一个节点是链表头指针,指向最后一个节点的指针设为None,表示它是链表尾,不指向任何地方。建立单向链表在python中,先定义一个类,关键属性是next(指针字段)class student: def __init__(self): self.name = '原创 2021-05-12 13:10:58 · 193 阅读 · 1 评论