数据结构
我在这里啊@
小白
展开
-
红黑树原理
1.二叉搜索树的定义若左子树不为空,则左子树上所有节点的值都小于根节点的值若右子树不为空,则右子树上所有节点的值都大于根节点的值且左右子树都为二叉搜索树2.二叉搜索树的操作查找:必须从根节点开始查找如果值比根节点大则查找右子树,否则左子树,直到找到节点插入:与查找类似逐个节点对比,直到找到满足条件的NULL,就插入到相应位置查找最大和最小值一直往左遍历,直到NULL,那就是最小值,最大值就是往右遍历。中序遍历也就是投影,最左边的值最小,最右边的最大3.红黑树二叉搜原创 2020-08-25 11:44:51 · 386 阅读 · 1 评论 -
平衡二叉树的实现原理
1.概念平衡二叉树建立在二叉排序树的基础上,目的是使二叉排序树的平均查找长度更小,即让各结点的深度尽可能小,因此,树中每个结点的两棵子树的深度不要偏差太大。平衡二叉树的递归定义:平衡二叉树是一棵二叉树,其可以为空,或满足如下2个性质:①左右子树深度之差的绝对值不大于1。②左右子树都是平衡二叉树。平衡因子的概念:结点的平衡因子 = 结点的左子树深度 — 结点的右子树深度。最低不平衡结点的概念:用A表示最低不...原创 2020-08-24 08:31:01 · 457 阅读 · 0 评论 -
二叉树非递归遍历的统一写法(前序,中序,后续,层序)
前,中,后序遍历这种写法是相反的,比如说前序,在代码里相应部分的顺序是右中左前中后都可以用这个模板,改变一下顺序就可以了class Solution {public: vector<int> preorderTraversal(TreeNode* root) { vector<int> res; stack<TreeNode*> s; if(root!=nullptr) s.push(root); .原创 2020-08-20 14:02:46 · 163 阅读 · 0 评论 -
C++中使用map容器实现哈希表的简单功能
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。使用哈希表求解,记录每个元素出现的次数,最后统计,如果大于数组长的一半就输出class Solution {public: int MoreThanHalfNum_Solution(vector<int> numbers) { map<int,int>原创 2020-08-18 13:32:08 · 649 阅读 · 0 评论 -
斐波那契数列通用解法(跳台阶等)
此类题目一般满足f(n) = f(n-1)+f(n-2)的规律,比如输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)1.递归解决int Fibonacci(int n) { if (n==0 || n==1) return n; return Fibonacci(n-1) + Fibonacci(n-2);}2.循环解决:int Fibonacci(int n) { if(n == 0) return 0; if(n ==原创 2020-08-18 11:26:06 · 130 阅读 · 0 评论 -
归并排序
采用分治的思想void merge(int arr[], int l, int m, int r) { //合并的时候有四个元素,从左到右下标依次为l,m,未定义,r //将左边一组的起始位置定义为nl int nl = l; //将右边一组的起始位置定义为nr int nr = m+1; //申请一个新的数组存放排序后的元素,长度与传进来的数组长度相等 int[] tmp = new int[arr.length]; int i = 0; /.原创 2020-09-05 10:10:23 · 83 阅读 · 0 评论 -
快速排序的实现
排序过程:1.首先设定一个分界值,通过该值将数组分成左右两部分2.将大于或者等于分界值的元素放到分界值的右边,剩下的放到左边3.然后,左边和右边的数据又可以再次设定分界值,重复上述步骤,可以看到这是一个递归的过程要点:l指向最左边的元素,r指向最右边的元素,r先动,l再动;l,r相遇的时候将相遇点和分界值交换#include <stdio.h>void QuickSort(int a[], int l, int r){ if(l > r) return;原创 2020-08-04 16:33:28 · 71 阅读 · 0 评论 -
C语言实现链式二叉树的基本功能
1.递归方式创建和遍历二叉树:采用先序输入#include <stdio.h>#include <stdlib.h>typedef struct node{ char data; struct node * lchild; struct node * rchild;}*btree;btree Create_Bittree(void) { char str; btree new; scanf("%c",&str); if('#' == str原创 2020-07-18 18:28:23 · 210 阅读 · 0 评论 -
插入排序和希尔排序
1.思路分析:以7, 3, 22, 15, 8为例第一次:拿出3与他左边的7进行比较,3比7小,此时7向后移动一位,3插入到7的位置第二次:拿出22与他左边的7进行比较,22比7大,不用再进行操作第三次:拿出15与他左边的22变焦,15比22小,此时22向后移动一位,22后移,15插入到22的位置,再看左边,比7大,不用再进行操作第四次:拿出8与22比较,8比22小,此时22向后移动一位,8插入到22的位置,在看左边,比15小,此时15向后移动一位,8插入到15的位置,在看左边,比7大,不用再操作原创 2020-07-18 16:09:08 · 91 阅读 · 0 评论 -
冒泡排序(改良版)
void bubbleSort(int *k, int n){ int flag = 1; int i,j,tmp; for(i = 0; i < n-1 && flag; i++) { for(j = n-1; j > i; j--) { flag = 0; if(k[j-1] > k[j]) { tmp = k[j-1]; k[j-1] = k[j]; k[j] = tmp; flag =原创 2020-07-13 15:43:13 · 134 阅读 · 0 评论 -
双向循环链表的简单应用
使用双向循环链表储存A~Z,并根据输入的值进行打印顺序的调整。例如输入3,打印D~Z~C,输入-3打印X~A~W#include <stdio.h>#include <stdlib.h>typedef struct node{ char data; struct node * next; struct node * piror;}*linklist;linklist Create_Circle(void){ linklist Headnode; linkl原创 2020-07-11 18:16:19 · 421 阅读 · 0 评论 -
C语言实现顺序队列的基本功能
//front指向队列的队头元素,rear指向队尾元素的下一个。因为链式队列有头节点,顺序队列没得头节点//为了判断是否未满,最后一个空间不放元素#include <stdio.h>#include <stdlib.h>#define MAX 100struct book{ int isbn; char name[32];};typedef str...原创 2020-05-01 14:33:05 · 135 阅读 · 0 评论 -
C语言实现链式队列的基本功能
//rear指向队尾部元素,front指向队头元素的前一个//链式队列相当与链表很相似,有着头指针和头节点,传参数也都是传的指针,但是不同的是这里的指针是结构体指针,可以看成二级指针//所以在打印等函数中需要有个中间变量,否则会改变front和rear的指向#include <stdio.h>#include <stdlib.h>struct book{ i...原创 2020-04-29 17:34:10 · 160 阅读 · 0 评论 -
C语言实现链式栈的各项基本功能
#include <stdio.h>#include <stdlib.h>//这里要修改栈的时候都要传二级指针,因为要改变指向使其始终指向栈顶元素,而单链表因为有头节点,传递的参数是指向头节点的头指针,并不需要改变指向,//所以即使修改链表的时候传递一级指针也足够。而不需要修改链表或者栈的函数也可以传递一级指针,因为函数中并没有修改值,只是用形式参数来指向下一个/...原创 2020-04-28 15:05:39 · 146 阅读 · 0 评论 -
C语言实现顺序栈的各项基本功能
这里将top的值置为0,即指向栈顶的上一个位置;也可以置为-1,指向栈顶位置,功能函数有细微区别//**main函数中定义为结构体变量形式,要改变的传地址,不改变的传值;初始值为0,指向的是当前栈顶元素的上一个位置**#include <stdio.h>#include <stdlib.h>#define MAX 128struct book{ int is...原创 2020-04-26 15:22:30 · 191 阅读 · 0 评论 -
使用sqlite3保存单链表的数据库以及单链表功能函数
//头文件#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sqlite3.h>typedef struct node{ int data; struct node *next;}linknode, *linklist;linklist Crea...原创 2020-04-22 18:06:24 · 596 阅读 · 0 评论