
数据结构
文章平均质量分 54
来自清华大学出版社数据结构--从概念到C++实现(第3版)
sad_liu
清醒 自律 知进退 明得失
展开
-
【数据结构】排序技术
public ://构造函数,生成待排序序列 ~ Sort();//析构函数 void InsertSort();//直接插入排序 void ShellSort();//希尔排序 void BubbleSort();//气泡排序 void QuickSort(int first , int last);//快速排序 void SelectSort();//简单选择排序 void HeapSort();//堆排序 void MergeSort1(int first , int last);原创 2023-07-21 21:07:22 · 110 阅读 · 0 评论 -
数据结构---线性表的查找技术(顺序查找、二分查找递归与非递归)
算法改进:设置哨兵。哨兵就是待查值,存放在查找方向的尽头处,在查找过程中每次比较后,不用判断查找位置是否越界,从而提高查找速度。实践证明,这个改进在表长大于1000时,进行一次顺序查找的平均时间几乎减少一半。在线性表中进行查找通常属于静态查找,这种查找算法简单,主要适用于小型查找集合。原创 2023-07-10 15:04:41 · 213 阅读 · 0 评论 -
图的存储结构及实现---邻接矩阵和邻接表(深度优先遍历和广度优先遍历)
关键在于两种遍历方式的理解,所以视频一定要理解清楚。原创 2023-06-29 07:46:43 · 467 阅读 · 0 评论 -
【数据结构】极大队列基本操作实现
优先队列的入队操作先将待插元素x插入队尾位置,然后将新插入元素从叶子向根方向进行调整,若新插入元素比双亲大,则进行交换,这个过程一直进行到根结点或新插入元素小于其双亲结点的值。或者每个结点的值都大于或等于其左右孩子结点的值(成为大根堆)。由于优先队列的队头元素位于堆顶,因此出队操作直接输出栈顶元素,为维护堆的性质,将队尾元素放到根结点,然后调整根结点重新建堆。是按照某种优先级进行排列的队列,优先级越高的元素出队越早,优先级相同按照先进先出的原则进行处理。定义PriQueue类。原创 2023-06-25 23:14:10 · 93 阅读 · 0 评论 -
二叉链表前序、中序、后序遍历非递归算法的实现
若栈不空,则弹出栈顶指针并根据栈顶指针找到右子树的根指针赋予bt,继续遍历下去。后序遍历与另外两个有所不同,当遍历完左子树,由于右子树尚未遍历,因此栈顶结点不能出栈,而是通过栈顶结点找到它的右子树,当遍历完右子树,才能将栈顶结点出栈并访问。在二叉树中序遍历中,访问结点的操作发生在该结点的左子树遍历完毕并且准备遍历右子树时,所以,在遍历过程中遇到某结点时并不能立即访问它,而是将它压栈,= nulllptr,表明当前二叉树不为空,此时应输出根结点bt的值并将bt保存到栈中,准备继续遍历bt的左子树。原创 2023-06-15 17:18:36 · 428 阅读 · 0 评论 -
哈夫曼算法建立最优二叉树
前两个for循环分别标记出没有父亲结点的数组下标,if语句目的在让i1始终保持是权值较小的那个的下标。最后一个for循环遍历剩下的权值寻找最小的结点。2.对于节点之间的连接,可以通过记录父亲和孩子节点的下标来完成。介绍一下Select函数:实现查找最小的两个权值的下标,因为返回值是两个,所以函数参数为引用。:从根结点到各个叶子结点的路径长度与相应叶子结点权值的乘积之和称为二叉树的带权路径长度。:带权路径长度最小的二叉树称为最优二叉树,也称哈夫曼树。:是对叶子结点赋予的一个有意义的数值量。原创 2023-06-13 14:36:26 · 218 阅读 · 0 评论 -
【数据结构】---发纸牌、八皇后问题、memset出现的错误
确实,memset 函数并不适用于初始化动态分配的数组,因为它只能对连续内存块进行填充。你提到的问题是关于使用 memset 初始化动态分配的数组的正确性。在这种情况下,我们需要使用其他方法来初始化动态分配的数组。解决办法:for循环、fill函数(代码注释中已实现)原创 2023-06-07 23:18:15 · 73 阅读 · 0 评论 -
数据结构、算法题联系(BFS广度优先、动态规划、并查集、一维前缀和、二分查找)
该算法流程大致如下:先将初始位置记录下来入队(队列元素包括三要素:起点坐标x,y和步骤,所以这里定义了一个结构体,然后queue容器以该结构体为模板),循环结束的标志是队列为空或者找到该最短步骤。absabd中的absa 因为bs是false 那么absa也是false,就是利用字串bs为false直接推出absa为false,而不用再重新判断其是否为回文串。经过调试之后发现是数组v的索引出了问题,因为数组下标是从0开始的,所以应当也要对第0行和第0列进行初始化,如示例一。共m行,每行输出一个询问的结果。原创 2023-06-01 22:50:24 · 140 阅读 · 0 评论 -
【数据结构】顺序栈和链栈的实现
【代码】【数据结构】顺序栈和链栈的实现。原创 2023-05-19 23:44:56 · 55 阅读 · 0 评论 -
【数据结构】线性表应用举例--链表实现约瑟夫环和一元多项式求和
据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式:41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。为了使计数器从1开始计数,采用尾指针指示的循环单链表,将指针pre初始化为指向终端节点,将指针p初始化为指向开始节点。N = 5, M = 3时出圈次序:3,1,5,2,4。原创 2023-05-19 12:50:52 · 196 阅读 · 0 评论 -
【数据结构】单链表的实现
单链表插入操作,如要插入到第i个位置,即在i-1和i之间插入新数据。那么必须先扫描链表,找到第i-1个位置的存储地址然后使用插入算法。单链表是动态存储分配的,单链表的节点是在程序运行中动态申请的,因此,在单链表变量退出作用域之前,要释放单链表的存储空间。画图实在累,直接拍照了。原创 2023-05-14 15:52:51 · 142 阅读 · 0 评论 -
顺序表的实现【数据结构】
将顺序表抽象数据类型用C++的类实现。其中成员变量实现顺序表存储结构,成员函数实现线性表的基本操作。由于线性表的数据元素类型不确定,所以采用C++的模板机制。插入操作,在第i个位置插入值为x的元素。按值查找 返回序号(不是下标)遍历操作,按序号依次输出各元素。按位查找,查找第i个元素的值。删除操作,删除第i个元素。原创 2023-05-13 13:59:13 · 107 阅读 · 0 评论 -
C++【数据结构与算法】顺序栈的实现和案例
顺序栈是栈的顺序实现。顺序栈是指利用顺序存储结构实现的栈。采用地址连续的存储空间(以159为例:第一次159%8=19…7 将19计为新num 7存入栈中。第二次19%8=2…3 将2计为新num 3存入栈中。2 将0计为新num 2存入栈中。num为0跳出循环 再将栈中元素依次出栈得出237。该十进制转换算法使用的是取余求法。所以157的8进制数为237。)依次存储栈中数据元素。原创 2023-04-26 19:44:19 · 135 阅读 · 0 评论