数据结构
文章平均质量分 68
编程的机械狗
这个作者很懒,什么都没留下…
展开
-
环形队列的实现
上代码(利用一个空元素来区分队列是空的还是满的)//用一个空元素来表示这样就可以区分队满以及队空; #include<stdio.h>#include<stdlib.h>#define OK 1 //返回的状态#define ERROR 0#define TRUE 1#define FALSE 0#define OVERFFLOW -2 //溢出#define INIT_SIZE 10typedef int QElemtype;typedef int原创 2021-08-26 11:36:00 · 147 阅读 · 0 评论 -
图解堆排序
完全二叉树一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。堆排序堆排序的时间复杂是O(nlgn)...原创 2021-06-25 12:04:20 · 138 阅读 · 0 评论 -
二叉搜索树
什么是二叉搜索树二叉搜索树对于任何节点x,其左子树中的关键字最大不超过x的关键字。其右子树中的关键字最小不低于x的关键字。如图所示:原创 2021-06-10 22:12:49 · 298 阅读 · 0 评论 -
理解位运算及其用法
位运算及其用法异或 ^参与运算的两个位,如果两个位相同结果为0,不同为10^0 = 0;1^1 = 0;1^0 = 1;三个特点:1、0 异或任意数还是任意数2、1异或任意数等于任意数取反3、任意数与自己异或相当于置零操作用途:1、用于不使用临时变量交换两个数(注意一点如果两个数相同就不能进行交换)例如交换a、b的值a = a^b;b = a^b;a = a^b;2、某些特定位进行反转:例如对11100010的1、2位进行反转 11100010^00000011 1原创 2020-12-28 20:54:39 · 387 阅读 · 0 评论 -
回溯算法 + 详解
什么是回溯算法要想了解回溯算法,就要知道什么是递归,其实回溯和递归是密不可分de,要有了递归,就能有回溯。回溯算法的性能并不是很高,因为回溯算法其实就是穷举算法。回溯算法可以解决以下集中问题:组合问题排列问题子集问题棋盘问题理解回溯算法回溯算法解决的问题都可以抽象为一个树形结构,因为回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度,都构成的树的深度。递归就要有终止条件,所以必然是一颗高度有限的树(N叉树)。回溯法一般是在集合中递归搜索,集合的大小构成了树的宽原创 2020-12-25 10:23:00 · 810 阅读 · 0 评论 -
荷兰国旗问题(对三个数排序)
对{1,0,0,2,2,1,0,2}进行排序算法思路如图以1为分届小于一的在1的左边,大于1的数在1的右边这样就可以进行三个数的排序。算法思路:1、当cur小于划分值的时候:当前数与小于区的下一个数做交换,并且小于区范围扩一、cur+1;2、当cur等于划分值的时候:cur+1;3、当cur大于划分值的时候,cur与大于区的前一个做交换,大于区域+1,cur不变。include<iostream>using namespace std;void swap(int *arr,i原创 2020-11-24 12:12:53 · 175 阅读 · 0 评论 -
前缀树的实现--C语言数据结构
又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。...原创 2020-07-24 20:50:45 · 493 阅读 · 0 评论 -
C语言实现LRU缓存机制——哈希表+双向链表
题目描述运用你所掌握的数据结构,设计和实现一个LRU(最近最少使用)缓存机制。它应该支持以下操作:获取数据get和写入数据 put。获取数据get(key)-如果关键字(key)存在于缓存中,则获取关键字的值(总是正数),否则返回-1。写入数据put(key,value)-如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组[关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。要求:时间复杂度为O(1):思路1、一开始想的是用一原创 2020-06-13 19:10:51 · 1923 阅读 · 0 评论 -
数据结构————栈(力扣)
栈来源:1381. 设计一个支持增量操作的栈来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/design-a-stack-with-increment-operationtypedef struct { int *a; //用数组表示一个栈 int size; //大小 int count;//当前大小} CustomStack;CustomStack* customStackCreate(int maxSi原创 2020-06-05 15:05:32 · 168 阅读 · 0 评论 -
排序算法(对三个数进行排序三指针)
思路采用三个指针1)头指针之前都是第一个数2)尾指针之后都是地三个数3)两个指针之间是第二个数看一下例子:例如对{1,0,0,2,2,1,0,2}进行排序代码部分void swap(int *a,int*b){ int temp; temp = *a; *a = *b; *b = temp;}void sortColors(int* nums, int numsSize){ int p0 = 0; int cur =原创 2020-06-03 20:05:23 · 1289 阅读 · 0 评论 -
数据结构————哈希表的实现(语言)
哈希表散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。哈希表可以存储各种类型的数据,当我们从哈希表中查找所需要的数据时,理想情况是不经过任何比较,一次存取便能得到所查记录,那就必须在记录的存储位置和它的关键字之间建立一个确定的对应关系 f,使每个关键字和结构中一个唯一的存储位置相对应。(关键字就是所要存储的数据,存储位置相原创 2020-05-28 23:13:04 · 347 阅读 · 0 评论 -
数据结构——交换排序(冒泡排序和快速排序。)
交换排序所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。冒泡排序1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3、针对所有的元素重复以上的步骤,除了最后一个。4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。//冒泡排序#include<原创 2020-05-20 19:54:34 · 282 阅读 · 0 评论 -
数据结构———插入排序(希尔排序,折半插入,直接插入)
排序直接插入排序直接插入排序。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。#include<stdio.h>void insertsort(int a[],int t){ int i,j; for(i=2;i<=t;i++) {原创 2020-05-19 16:31:38 · 420 阅读 · 0 评论 -
二叉树的三种遍历算法的实现(前序、中序、后序)递归与非递归
二叉树的三种遍历算法的实现(前序、中序、后序)递归与非递归1、二叉树的定义二叉树是n(n>=0)个数据元素的有限集,含有唯一的称为根的元素,且,其余元素分成两个互不相交的子集,每一个子集本身也是一个二叉树,分别称为左子树和右子树。集合为空的二叉树简称为空树,二叉树中的元素也称为节点。这是一个递归的定义。2、二叉树的存储结构:2.1 顺序存储结构typedef struct{TE...原创 2020-03-26 21:44:04 · 10358 阅读 · 0 评论 -
队列的数组表示
1、队列的结构特点和操作复习一下队列:数据结构“队列”与我们日常生活中的排队非常相似,按照先到先办的原则办事,并且严格规定不能加塞,也不允许中途离队。队列:限定只能在队尾进行插入元素,在表头进行删除。允许插入的一端叫队尾,允许删除的一端叫队头。1.1循环队列和顺序栈相类似,再利用顺序分配存储结构实现队列时,除了用一纬数组描述队列中的数据元素的存储区域,还需要设立两个指针front 和 re...原创 2020-03-30 22:05:15 · 511 阅读 · 0 评论 -
图的深度优先遍历和广度优先遍历的实现
图的定义和术语图(grath)由一个顶点(vertex)的有穷非空集合V(G)和一个弧(arc)的集合E(G)组成,通常记作G = (V,E)。图中的顶点就是数据结构中的数据元素,弧的集合E实际上是定义在顶点集合上的一个关系。以下用有序对<v,w>,表示v到w的一条弧。弧有方向性,需以一带有箭头的线段表示,通常称v(没有箭头的出发端)为弧尾或始点称w(带有箭头的终止端)为弧头或终点,...原创 2020-04-12 22:58:27 · 13322 阅读 · 2 评论 -
数据结构————线性表的实现 合并
1、表的实现1.1表的数组表示#include <stdio.h>#include <stdlib.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INIT_SIZE 10 //初始化表长#define INCREMENT_SIZE 5 //分配增量...原创 2020-04-26 20:30:37 · 441 阅读 · 0 评论