数据结构
szplzx1314
这个作者很懒,什么都没留下…
展开
-
线索二叉树(数据结构就到这里吧)
所谓线索二叉树其实就是,二叉树中有很多空结点,左孩子结点为空指向前驱,右孩子结点为空指向后继.(前驱后继是只遍历时的前驱后继(前序,中序,后序)).具体实现就是借助标志,为了操作统一,增加头结点,头结点的左孩子指向根节点,右孩子指向最后一个结点.算了吧,数据结构就到这里吧,代码量太大,还要画图.实在太浪费时间精力了.而且这个东西的代码本身意义实在有限.所以就到这里吧,之后有时间的话再补上....原创 2021-11-03 16:20:50 · 113 阅读 · 0 评论 -
树和二叉树
树一个结点有多个后继多用树来表示有层次的结构,树的应用非常广泛0个结点为空树树的基本术语有序树:树的结点从左到右有序(最左的结点为第一个孩子)无序树:树中结点没有顺序森林:N(n >= 1)个互不相交的树的集合(树一定时森林,森林不一定是树)二叉树结构简单,规律性强任何树都可以转换为二叉树,因为多叉树很难实现运算.二叉树的结点不能大于2(度不能大于2)二叉树的结点有左右子分,并且不能颠倒(即使单独只有左右一个结点)....原创 2021-11-01 10:31:38 · 86 阅读 · 0 评论 -
串,数组和广义表
串只能是字符的线性表子串串中取任意字符包括串自身子串位置子串在串中第一个字符出现的位置空格串" "空格串""空串原创 2021-10-26 09:47:45 · 93 阅读 · 0 评论 -
数据结构-栈和队列
栈(LIFO-last in Frist out)仅在表尾(栈顶)进行插入删除操作的线性表.表尾又叫栈顶(top),表头又叫栈底(base)插入到栈顶叫入栈(push)删除栈顶元素叫出栈(pop)队列(FIFO-fist in Frist out)仅在表尾插入,在表头删除操作的线性表...原创 2021-10-25 09:29:45 · 3517 阅读 · 0 评论 -
数据结构-线性表
线性表具有相同数据的有限序列,首元素没有前驱,尾元素没有后继.其他元素只有一个前驱和后继.顺序存储逻辑上相邻的数据元素,存储在物理上相邻的存储单元中.优点存储密度大,可以随机存取表中任意元素缺点插入删除需要移动大量元素,浪费空间,不能自由扩充不够灵活.时空复杂度时间复杂度为O(n)空间复杂度为O(1)sequence_list.hpp#pragma once#include <iostream>using namespace std;原创 2021-10-20 12:50:22 · 145 阅读 · 0 评论 -
数据结构,抽象数据类型,算法时间复杂度分析
也叫向量,用定长的一维数组存储.特性元素类型相同.按顺序存储空间中,每个元素都有唯一的索引值.使用常数作为向量的长度.方便读写,通过下标可以随机存取.原创 2021-10-15 14:57:18 · 140 阅读 · 0 评论 -
排序算法-快速排序
原理取一个轴,左边小于右边大于,不断的取轴,左小右大.啊啊啊啊啊啊啊,这代码有bug,我打了三个小时补丁也没搞定,实在烦了,就直接这样吧.无伤大雅,这东西要用直接复制粘贴就行了,原理没问题就好.#include <iostream>#include <vector>#include <algorithm>using namespace std;int myPartition(vector<int>& v, int min, i原创 2021-10-11 01:31:40 · 61 阅读 · 0 评论 -
排序算法-归并排序
了解归并排序之前复习一下递归递归递归可以把大的问题,分解成小问题.需要结束条件,否则递归无法结束.每次递归都需要在栈上开辟新空间.#include <iostream>using namespace std;int factorial(int num){ if (num == 1) //结束条件 { return 1; } return num * factorial(num - 1);}int main(){ cout << fac原创 2021-10-10 23:11:40 · 57 阅读 · 0 评论 -
排序算法-希尔排序(进阶版插入排序)
原理他就是提高了插入的效率,选定步长,根据步长进行分组然后根据组进行插入排序.步长不断减少,当减少到1时就是插入排序时间复杂度最坏情况O(N^2)其实可以理解成插入排序是根据1来排序,而希尔排序是根据步长来排序的.#include <iostream>#include <vector>#include <algorithm>using namespace std;void shellSort(vector<int>&原创 2021-10-10 18:19:42 · 66 阅读 · 0 评论 -
排序算法-插入排序
原理数据分为已排序和未排序两部分,将未排序的一次插入到已排序的部分就是插入排序#include <iostream>#include <vector>#include <algorithm>using namespace std;void insertionSort(vector<int>& v){ //没有元素或元素少于两个不需要排序 if (v.empty() || v.size() < 2) { retur原创 2021-10-10 17:31:45 · 48 阅读 · 0 评论 -
排序算法-冒泡排序
原理最大值最小值一直向尾移动时间复杂度O(n^2)之后就不写那么详细了,其实这个东西还是原理比较重要,而原理单单只是文字描述实在无力,其他方式太浪费时间了,得补尝思.还是最初那句话我只是向从头开始记录笔记仅此而已.不是为了教学啥的,如果这期间能有幸帮到某人,深感荣幸.#include <iostream>#include <vector>#include <algorithm>using namespace std;void bubble原创 2021-10-10 16:59:01 · 60 阅读 · 0 评论 -
排序算法-选择排序
原理设最小最大值下标依次为数组下标i,排列n-1次(两个数排一次有序,三个数排两次有序(其实也可以理解成下标越界)),每一次排列将最大最小值元素移动到首尾部未排序的位置(也就是当前i的位置)其实就是选择出一个最大的或最小的放到数组的首部或尾部,就是选择排序.具体写法有很多,而且这东西原理远远大于代码本身,当明白原理代码量和逻辑上去了,自然就能写出来了.#include <iostream>#include <vector>#include <algorit原创 2021-10-10 16:36:33 · 53 阅读 · 0 评论