数据结构
QiuYuSy
想多了全是问题,做多了全是答案
展开
-
【动手学数据结构】第二章 线性表代码
代码使用C++实现,编译器Dev C++ 5.4.0顺序存储静态顺序表动态顺序表链式存储带头结点单链表不带头结点单链表顺序存储顺序表静态顺序表#include <stdio.h>#define MaxSize 10typedef struct{ int data[MaxSize]; //定义数组 int length; //当前长度 }SeqList;//初始化顺序表 void InitList(SeqList &.原创 2022-01-29 01:01:04 · 1198 阅读 · 0 评论 -
数据结构-二叉排序树(BST)和平衡二叉树(AVL)的实现
二叉排序树就是一种完成了排序的二叉树添加节点的时候,比目前节点值小的放在左子树,大的放在右子树,然后不断的递归。这样做的好处就是,中序遍历该二叉树就可以的到排好序的节点。并且这种数据结构拥有数组和链表的优点,能够很快的CRUD。实现的难点主要在删除节点上需要分为三种情况进行考虑:删除的目标节点就是叶子节点,需要得到目标节点的父节点,然后让父节点的left或者right为null,如果父节点为空的话,说明这个树只有一个节点,root = null 就好了目标节点只有一个子树,需要知道两个相对位置原创 2020-09-01 21:29:55 · 666 阅读 · 0 评论 -
数据结构-哈希表(散列表)的实现
哈希表又叫散列表,其实就是存着链表的引用数据类型的数组,但是需要注意的是这些链表的头节点是有数据的!不像普通链表那样只起到链接作用。而节点们根据自己的数据通过散列函数(以下程序的散列函数是一个简单的求余)被决定到底要去到哪一个链表。哈希表这种数据结构可以说整合了数据和链表的优势,既有较快的查询速度又有较快的增删速度。在以前用来做缓存。package 哈希表;public class HashTabDemo { public static void main(String[] args) {原创 2020-08-30 03:42:02 · 156 阅读 · 0 评论 -
数据结构-四种查找算法
查找算法一、个人感悟1)线性查找2)二分查找3)插值查找二、代码1)线性查找2)二分查找3)插值查找一、个人感悟1)线性查找缺点非常明显,耗费的时间太长优点是可以查找没有排好序的数组2)二分查找mid的算法是 left+(right - left)/2缺点是需要排好序的数组优点是对于线性查找大大减少耗费时间3)插值查找原理与二分查找类似,但是mid拥有了适应性mid的算法变为 left+(right - left) * (findVal - arr[left]) / (arr[righ原创 2020-08-28 00:45:23 · 803 阅读 · 0 评论 -
数据结构-九种排序算法
排序算法算法时间复杂度个人感想1.冒泡2.插入2.1直接插入2.2希尔排序交换式(较慢,不建议使用)位移式(较快)3.选择算法时间复杂度个人感想冒泡和选择较为基础,不再赘述。(选择比冒泡快点)插入排序比以上两者都快希尔排序的位移式比插入快,希尔排序的交换式比插入慢1.冒泡package 排序.冒泡;public class BubbleSort { public static void main(String[] args) { int[] arr = {1,5原创 2020-08-26 19:53:59 · 390 阅读 · 0 评论 -
数据结构-中缀表达式转后缀表达式_用栈模拟后缀计算器
针不挫啊针不挫后缀计算器解决了前文中中缀计算器的问题完成后缀计算器主要分为两步:将中缀表达式转变为后缀表达式用后缀表达式进行计算这个计算器目前支持 + - * / ( )目前不支持小数点和其他符号,学习正则表达式后可以再优化一下package 栈.栈实现计算器.逆波兰_后缀计算器;import java.util.ArrayList;import java.util.List;import java.util.Stack;public class PolandNotation原创 2020-08-24 18:18:21 · 166 阅读 · 0 评论 -
数据结构-用栈实现计算器中 尚硅谷老师出现的思路问题
尚硅谷的JAVA数据结构与算法中用栈实现计算器的问题老师的思路这种思路的问题在等号执行前,两个栈的情况老师的代码老师的思路这种思路的问题如果在运算中出现了减去一个乘法然后再进行运算的情况就会出现问题例如:3-2*1+1在等号运算前栈内的情如下图所示此时继续执行程序会让数字2、1和运算符‘+’弹栈,然后再运算完后结果为2再把2压栈到nums中这里就是问题所在了按照正常的运算应该是3-2+1 = 2而这里却是 3-(2+1) = 0 !!我弄了半天还以为是自己代码有问题结果用老师的源码试原创 2020-08-23 19:03:26 · 275 阅读 · 0 评论 -
数据结构-分别用数组和单链表模拟栈
两者的优缺点:数组:优点:压栈出栈应该比链表的快缺点:开始时就限制了栈的最大容量链表:优点:只要内存够,理论上容量无限大缺点:压栈出栈应该比数组的慢两种模拟栈的方式用数组模拟栈用链表模拟栈用数组模拟栈package 栈.用数组模拟栈;import java.util.Scanner;public class ArrayStackDemo { public static void main(String[] args) { ArrayStack stack =原创 2020-08-23 01:36:11 · 176 阅读 · 0 评论 -
数据结构-约瑟夫问题(环形链表)
约瑟夫问题问题描述环形链表的建立和遍历图解约瑟夫问题的解决步骤图解代码代码的注意事项问题描述约瑟夫问题:有N个小孩围成一圈,给他们从1开始依次编号,现指定从第K个开始报数,报到第m个时,该小孩出列,然后从下一个小孩开始报数,仍是报到m个出列,如此重复下去,直到所有的小孩都出列(总人数不足m个时将循环报数),求小孩出列的顺序。环形链表的建立和遍历图解约瑟夫问题的解决步骤图解代码代码的注意事项在写计算去除顺序时,我用的辅助指针为temp 和 curtemp指向报到m的那个小孩cur指向报到原创 2020-08-22 21:17:26 · 366 阅读 · 0 评论 -
数据结构-JAVA中带头节点的单向双向链表的CRUD操作
个人感悟:在单向链表的CRUD中需要更加注意辅助指针的指向,比如在删除节点时,无法直接删除辅助指针指向的节点,因为无法找到前一个节点,并让其指向当前节点的后一个节点。此时的解决方法就是永远让你的辅助指针在你想要比较的节点的前面一个节点,这样就可以轻松让前一个节点指向后一个节点了。而在双向链表中则没有这种担忧,直接干就完了。(最后更新时间 2020/8/22 2:24)以下为带头节点的链表(双向链表处的代码更加凝练)单向链表的增删改查操作双向链表的增删改查操作单向链表的增删改查操作package 单原创 2020-08-22 02:25:13 · 269 阅读 · 0 评论