数据结构
文章平均质量分 87
wardoluo
这个作者很懒,什么都没留下…
展开
-
树-二叉树(前中后序遍历+按值查找+删除节点)
为什么需要树这种数据结构:1)数组存储方式的分析:优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者,或者插入值(按一定顺序)会整体移动,效率较低。2)链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接道链表中即可,删除效率也很好)。缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从你个头节点开始遍历)。3)树存储方式的分析能提高数据存储,读取的效率,比原创 2021-03-26 14:00:18 · 951 阅读 · 0 评论 -
二分查找和插值查找
1.线性查找2.二分查找原创 2021-03-23 16:18:29 · 376 阅读 · 0 评论 -
排序算法(冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序)
排序也叫排序算法,排序是将一组数据,依指定的顺序进行排列的过程。排序的分类:1)内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。2)外部排序:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。3)常见的排序算法分类:内部排序:(1)插入排序:直接插入排序、希尔排序(2)选择排序:简单选择排序、堆排序(3)交换排序:冒泡排序、快速排序(4)归并排序、基数排序我们先回顾知识点:时间复杂度时间频度:一个算法花费的时间与算法中语句的执行次数成正比例原创 2021-03-18 20:03:57 · 6065 阅读 · 0 评论 -
递归(回溯之迷宫问题+八皇后)
回顾知识点递归概念:递归就是方法自己调用自己,每次调用时传入不同的变量。递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。递归调用机制:1)打印问题2)阶乘问题// 打印问题private static void test(int n){ if(n > 1){ test(n - 1); // 到1为止 } System.out.println("n = " + n);}// 阶乘问题private static int f原创 2021-03-11 19:12:23 · 140 阅读 · 0 评论 -
前缀(波兰)、中缀、后缀(逆波兰)表达式
前缀、中缀、后缀表达式是对表达式的不同记法,其区别在于运算符相对于操作数的位置不同,前缀表达式的运算符位于操作数之前,中缀和后缀同理。前缀表达式(波兰表达式)前缀表达式又称波兰式,前缀表达式的运算符位于操作数之前。举例说明(3+4)*5-6对应的前缀表达式就是-*+3456。前缀表达式的计算机求值:从右往左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶两个数,同运算符对它们做相应的计算(栈顶元素和次顶元素)...原创 2021-03-11 15:24:40 · 1441 阅读 · 0 评论 -
栈Stack(数组模拟、单链表模拟)
栈是一个先入后出的有序列表,是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶定(top),另一端为固定的一端,称为栈底(bottom)。根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。入栈图解:出栈图解:应用场景:1)子程序的调用:在跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程序执行完毕之后再将地址取出,以回到原来的程序中。原创 2021-03-09 19:47:07 · 193 阅读 · 0 评论 -
双向链表和环形链表(单向和双向)约瑟夫环实例
双向链表数组优缺点:根据下标直接查找和修改,增删需要移动后续数据,效率低。单向链表的缺点:增删快速,查找需要从头遍历,效率低。双线链表可以向前或向后查找。单向链表查找的方向只能是一个方向(双向链表可以向前向后查找),且不能自我删除,需要靠辅助节点,而双向链表,则可以自我删除,所以前面我们单链表删除节点时,总是找到temp的下一个节点来删除的(就是指temp.next.data == data,因为要对该节点的前一个节点及后一个节点操作。)双向链表节点包含数据域data、前驱指针域prev原创 2021-03-06 13:10:56 · 513 阅读 · 0 评论 -
单链表LinkedList的增删改查
数组作为数据存储结构有一定的缺陷。在无序数组中,搜索性能差,在有序数组中,插入效率又很低(插入位置后面的元素需要集体后移),而且这两种数组的删除效率(集体前移)都很低,并且数组在创建后,其大小是固定了,设置的过大会造成内存的浪费,过小又不能满足数据量的存储。数组是一种通用的数据结构,能用来实现栈、队列等很多数据结构。而链表也是一种使用广泛的通用数据结构,它也可以用来作为实现栈、队列等数据结构的基础,基本上除非需要频繁的通过下标来随机访问各个数据,否则很多使用数组的地方都可以用链表来代替。注意:链表是原创 2021-03-04 18:31:57 · 534 阅读 · 2 评论 -
队列
队列,进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。队列特点:先进先出队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明队列分为:①、单向队列(Queue):只能在一端插入数据原创 2021-03-04 15:43:24 · 942 阅读 · 2 评论 -
稀疏数组
一.稀疏数组sparsearray定义:当一个数组元素中大部分元素为0,或者为同一值时,可使用稀疏数组保存数组。即从原数组中抽取有效数据、剔除相同元素从而形成一个新的数组。处理方式:记录数组一共几行几列,有多少不同的值,把具有不同值元素的行列及值记录在一个小规模的数组中,从而缩小数组的规模。应用场景举例说明:稀疏数组的第一行记录的是原数组的行列数(12)以及多少个有效值(16),注意行列数都是从0开始。因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据->稀疏数组,12原创 2021-03-04 14:44:20 · 98 阅读 · 2 评论 -
数据结构基本概念和术语
1.1数据结构的研究内容通常,用计算机解决一个问题的步骤:首先具体问题抽象为数学模型,然后设计算法,最后编程、调试、运行。具体问题抽象为数学模型的实质:分析问题、提取操作对象、找出操作对象之间的关系、用数学语言描述。这其中的操作对象和操作对象之间的关系就是数据结构。随着计算机应用领域的扩展,计算机被越来越多地用于非数值计算,比如学生信息录入修改等。操作对象:每位学生的信息(学号、姓名、性别、籍贯、专业...)操作算法:查询、插入、修改、删除等。操作对象之间的关系:线性关系数据结.原创 2021-02-28 20:23:01 · 1103 阅读 · 0 评论