![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
li_jeremy
生活不止眼前的苟且,还有诗和远方的田野
展开
-
2020数据结构-绪论
1.1 数据结构的起源和发展研究数据的特性和数据之间存在的关系此即为数据结构。1.2 基本概念和术语1. 数据数据不仅包括数值型信息,还包括非数值型数据,如:图像、声音、文字。所谓的数据是对客观事物的符号表示,这些符号具备两个条件:(1)能输入到计算机中。(2) 能被计算机程序处理。对于非字符型数据可对其进行编码将其转变为字符型数据再进行处理。2.数据元素数据元素是数据的一个基...原创 2019-07-18 17:23:19 · 184 阅读 · 0 评论 -
2020数据结构-线性表(1)
2.2线性表2.1线性表的定义线性表是一种简单的线性结构,具有如下特征:(1)集合中必须存在唯一的一个第一个元素。(2)集合中必须存在唯一的一个最后一个元素。(3)除最后一个元素外均有一个唯一的直接后继。(4)除第一个元素外,均有唯一的直接前驱。...原创 2019-07-19 11:25:41 · 340 阅读 · 0 评论 -
2020数据结构-线性表(2)
3.删除操作将指定位置的学生数据删除。//三个参数最后一个是将被删除的数据元素传出去的指针变量int deletetSqList(SqList *L,int i,STD *x){ int k; if(L->length == 0){ printf("没有数据,不能删除\n"); return 0; } if(i<0||i>L->length){ p...原创 2019-07-19 19:50:01 · 205 阅读 · 2 评论 -
2020数据结构-线性表(3)
2.2.3.4静态链表由于某些程序设计语言,不支持指针变量,可以用数组模拟单向链表,称为静态链表。基本思想:开辟一个较大的容量的一维结构体数组,每个数组元素是一个结点,包含一个数据域和指针域,指针域的类型为int用来存放下一个结点的下标。。为了方便插入和删除,将一维结构体数组分为两组,已经存放数据元素的组成一个链表,未存放的结点组成另一个备用链表,用于提供插入时的新结点,回收删除的结点。1....原创 2019-07-19 20:52:36 · 127 阅读 · 0 评论 -
2020数据结构-线性表(4)
2.4其他形式的链表2.4.1单向循环链表在单向链表的基础上,在其最后一个结点的指针域中将空指针改为指向头结点的指针,此即为单项循环链表。常用的单项循环链表有两种,一种是带头指针的单项循环链表,另一种是带尾指针的单项循环链表。带头指针的单项循环链表判断为空的条件:L->next == L带尾指针的单项循环链表的判断为空的标志是:R->next == R如果有两个带尾指针的单...原创 2019-07-20 19:24:38 · 169 阅读 · 0 评论 -
2020数据结构-栈和队列
一、栈和队列1.栈1.1 栈的基本概念定义:栈是一种线性表,只允许在一端进行插入或者删除操作的线性表。栈顶:线性表允许进行插入删除的一端。栈底:固定的,不允许进行插入和删除。空栈:不含任何元素的空表。栈的操作特性是后进先出。1.2 栈的顺序存储结构顺序栈的实现:采用顺序存储的栈称为顺序栈,它利用一组连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针(top)指示当前...原创 2019-09-20 16:53:46 · 291 阅读 · 0 评论 -
复试上机指南之中缀、后缀表达式
输入表达式,输出值。分两种情况:中缀表达式和后缀表达式。中缀表达式求值:先将中缀表达式建立二叉树转后缀表达式,然后再求值。code#include <iostream>#include <string>#include <string.h>#include <math.h>#include <stdlib.h>using...原创 2020-03-24 16:47:40 · 189 阅读 · 0 评论 -
2020数据结构-树和二叉树
5.1 二叉树5.1.1二叉树的定义二叉树或为空树,或是由一个根结点加上两棵分别称为左子树和右子树的‘互不相交的二叉树组成。特点:每个结点至多有两棵子树,子树有左右之分,其次序不能任意颠倒。特殊的二叉树(1)满二叉树二叉树中每一层的结点数都达到最大,所有叶子结点均在最后一层。(2)完全二叉树除最后一层外,其余各层均满。最后一层或是满的,或者右边缺少连续的若干结点。即叶子结点只能出...原创 2019-07-23 19:30:50 · 1035 阅读 · 0 评论 -
2020数据结构--树
一、树1.树的基本概念1.1树的定义树是n(n>=0)个结点的集合,n=0时,称为空树,这是一种特殊情况。在任意一棵非空树中应该满足:有且仅有一个特定的称为根的结点。当n>1时,其余结点可分为m(m>0)个互不相交的有限集合T1,T2…Tm其中每个集合本身又是一棵树,称为根结点的子树。树的定义是递归的,是一种递归的数据结构。树作为一种逻辑结构,同时也是一种分层结构...原创 2019-09-19 19:24:28 · 739 阅读 · 0 评论 -
2020数据结构-图之基本概念
一、图1.图的基本概念1.相关定义图是由顶点的有穷非空集合以及顶点之间的边的集合组成的,通常表示为:G(V,E),其中,G表示一个图,V是图中的顶点的集合,E是图G中边的集合。线性结构中,元素仅有线性线性关系,每个元素仅有一个直接前驱和直接后继。树形结构中,数据元素(结点)之间有着明显的层次关系,每层上的元素可能和下一层中多个元素相关,但只能和上一层中的一个元素相关。图...原创 2019-09-18 17:21:54 · 2624 阅读 · 0 评论 -
2020数据结构-排序算法之交换排序(冒泡、快排)
二、交换排序(冒泡、快排比较常见,简单分析即可)1.冒泡排序基本思想从后往前两两比较相邻元素的值,若为逆序则交换他们,直到序列比较完,我们成为一趟冒泡。效率分析空间效率:O(1)时间效率:最坏O(n·n)2.快速排序基本思想分治法,人去一个元素作为基准,通过一趟排序将表划分为两个独立的部分,使得左侧(如果是从小到大排序的话)的小于基准值,右侧的大于基准值,这个工程...原创 2019-09-16 17:23:52 · 163 阅读 · 0 评论 -
2020数据结构-排序算法之选择排序(简单选择、堆排序)
一、选择排序(简单选择、堆排序)1.简单选择基本思想假设排序表为L[1…n],在第一次取min=i,L[i]为最小元素,之后设置一个标志位j循环与L[min]进行比较,若发现L[j]<L[min],则令min=j,如果min != i,就交换L[min]与L[i]的位置。效率分析空间效率:O(1)时间效率:O(n·n)稳定性:不稳定。2.堆排序基本思想是一种...原创 2019-09-16 19:37:58 · 247 阅读 · 0 评论 -
2020数据结构-排序算法之归并排序、基数排序
一、归并排序和基数排序1.归并排序基本思想归并算法的中心是归并两个已经有序的数组。归并两个有序数组A和B,就生成了第三个数组C,数组C包含数组A和B的所有数据项,并且使它们有序的排列在数组C中。举例效率分析空间:O(n)时间:每趟归并的时间复杂度为O(n),共需进行log2n(向上取整)趟归并,所以时间复杂度为O(nlog2n)。稳定性:稳定。2.基数排序...原创 2019-09-16 20:01:13 · 224 阅读 · 0 评论 -
2020数据结构-排序算法之内部算法的比较
一、内部排序算法的比较(一)时间复杂度简单选择排序、直接插入排序、冒泡排序平均情况下的时间复杂度都为O(n·n)。希尔排序对较大规模的排序都可以达到很高的效率。快排在实际应用中常优于其他算法。(二)空间复杂度简单选择、插入、冒泡、希尔、堆排序都仅借助常数个辅助空间。快速排序在空间上仅使用一个小的辅助栈,用于实现递归。(三)稳定性插入、冒泡、归并、基数是稳定的排序方法。...原创 2019-09-16 20:23:58 · 543 阅读 · 0 评论 -
2020数据结构-排序算法之外部排序
一、外部排序概念外部排序指待排序文件较大,内存一次放不下,需要存放在外部介质的文件的排序。在排序过程中需要进行多次外村和内存之间的交换,对外存文件的内容进行排序后结果仍然被存放到原文件。方法由于外部设备的不同,通常又可分为磁盘文件排序和磁带文件排序不同之处在于:初始归并段在外存介质中的分布方式,磁盘是直接存取设备,磁带是顺序存取设备。后续再更。。。...原创 2019-09-16 20:30:38 · 136 阅读 · 0 评论 -
2020数据结构-查找之顺序查找和折半查找
一、顺序查找和折半查找1.顺序查找顺序表查找分为对一般的无序线性表的顺序查找和对关键字有序的顺序表的顺序查找。1.1 一般线性表的顺序查找基本思想从线性表的一端开始,逐个检查关键字是否满足给定的条件。若查找到某个关键字满足的给定条件,则查找成功,返回该元素在线性表中的位置;若已经查找到表中的一端,还未找到则返回查找失败的信息。算法分析对于有n个元素的表,给定的key值与表...原创 2019-09-17 16:47:25 · 3539 阅读 · 0 评论 -
2020数据结构-查找之B树和B+树
一、B树和B+树1.B树应用场景查找磁盘中地海量数据。基本思想1.若根结点不是终端结点,则至少有2棵子树。2.除根节点以外的所有非叶结点至少有 M/2 棵子树,至多有 M 个子树(关键字数为M-1)。3.所有的叶子结点都位于同一层。与平衡二叉树的对比(图片来自网络,侵删)B 树的每个节点可以表示的信息更多,因此整个树更加“矮胖”,这在从磁盘中查找数据(先读取到内存...原创 2019-09-17 17:47:30 · 403 阅读 · 0 评论 -
2020数据结构-查找之散列表
一、散列表1.基本概念线性表和树表的查找中,记录在表中的位置与记录的关键字之间不存在确定的关系,因此,在这些表中查找记录时需要一些关键字比较。这类查找建立在“比较”的基础上,查找的效率取决于比较的次数。散列函数:把查找表中的关键字映射成该关键字对应的地址的函数(这里的地址可以是数组下标、索引或内存地址等)。冲突:散列函数可能会把两个或两个以上的不同关键字映射到同一地址。同义词:上述发生...原创 2019-09-17 19:44:15 · 1538 阅读 · 0 评论 -
2020数据结构-查找之串
串1.串的定义串(字符串):是零个或多个字符组成的有限序列。记作:S=“a1a2a3…”,其中S是串名,ai(1≦i≦n)是单个,可以是字母、数字或其它字符。串值:双引号括起来的字符序列是串值。串长:串中所包含的字符个数称为该串的长度。空串(空的字符串):长度为零的串称为空串,它不包含任何字符。空格串(空白串):构成串的所有字符都是空格的串称为空白串。注意:空串和空白串的不同,例如“...原创 2019-09-17 20:27:56 · 241 阅读 · 0 评论 -
2020数据结构-排序算法之插入排序
前言最近在看2020王道的第7章,排序感觉讲的不适合我这种比较菜的人,所以结合王道课本每个算法来一个例子分析一波,感觉这样更好理解。插入排序(直接插入、折半插入、希尔排序)交换排序(冒泡、快排)选择排序(简单选择、堆排序)2路归并排序基数排序外部排序一、插入排序1.直接插入基本思想(对我而言用处不大,起码做题理解的不到位)每次将一个待排序的记录按其关键字(希望进行排...原创 2019-09-16 17:05:16 · 174 阅读 · 0 评论 -
2020C语言--指针、结构体、文件之指针
从今天开始就是C语言的指针了,今年博主考数据结构和C语言,对一些难点重点进行了总结,这次的C语言写完了就开始过代码了,一起加油吧。原创 2019-09-20 21:44:14 · 473 阅读 · 0 评论 -
关于单链表的一些简单想法
今天写了一个关于单链表的输入输出问题其中涉及到一些知识点自己原来没见过,就想写下来,怕自己忘了,也给大家一些启发。 首先,今天写这个是一个程序的一部分,是利用单链表写一个简单的通讯录,实现插入、删除、输出三种操作,程序都是由小到大的,先把主体写好即赋值、输出等,后面的就是根据单链表的一些性质定义几个函数就好;我的问题挺多的下面分点说吧,有几点算几点:1. 首先是自己之前一直对char a[原创 2017-11-24 00:13:10 · 3496 阅读 · 0 评论 -
dijkstra和floyd简单实现
今天给大家带来的是利用dijkstra和floyd实现的城市之间的最短距离,功能单一主要是dilkstra和floyd的实现和输出,程序可以运行。 自己现在处于出击学习阶段,正在学习数据结构,大部分在书上找的,自己对原理不是特别的清楚,希望得到大家宝贵的意见。 dijkstra#include<stdio.h>#include<malloc.h>#include<stdlib.h>#in原创 2017-12-04 22:34:07 · 338 阅读 · 0 评论 -
二叉排序树
一个关于化妆品价格的二叉排序树,中间有一部分自己不会敲,借鉴的其他博主的一些思想。/*李书豪2017.11.25要求:建立一个由多种化妆品品牌价格组成的二叉排序树,并按照价格从低到高的顺序打印输出。*/#include<stdio.h>#include<stdlib.h>#include<malloc.h>typedef struct odds{ struct odds *原创 2017-11-25 18:26:11 · 909 阅读 · 0 评论 -
单链表实现通讯录
利用单链表实现的简单通讯录。/*//作者:李书豪//时间:2017.11.23//内容:建立某班学生的通讯录,要求用链表存储。具体功能包括:// (1)可以实现插入一个同学的通讯录记录;// (2)能够删除某位同学的通讯录;// (3)对通讯录打印输出。 //要求:(1)掌握线性表的基本操作在两种存储结构上的实现;// (2)熟练掌握各种链表的操作以及在原创 2017-11-25 18:19:59 · 4207 阅读 · 0 评论 -
快速排序、二分查找 学生信息(可进行姓名查找)
代码:#include<stdio.h>#include<stdlib.h>#define m 3struct student{ long cardnum;; char name[20]; char academy[20]; long class_num;};void input(struct student stu[m]){ int j,i=1;原创 2017-12-05 18:23:36 · 3922 阅读 · 0 评论 -
排序算法简介
所有代码经过调试可以运行,只是自己的一些简单想法的总结,希望大家能多多批评谢谢!!! 所使用到的头文件#include<stdio.h>#define MAXSIZE 100typedef int keytype;typedef struct{ keytype key; int other;}recordtype;typedef struct{ recordtype原创 2017-12-06 22:55:19 · 195 阅读 · 0 评论 -
校园导游咨询系统
这是我的一个数据结构课设,也是第一次做课设,做的校园导游咨询系统,相信大家很多在大学学过数据结构的同学都接触过,但是在我做的课设中对floyde和dijstra算法没有大篇幅的使用,反而自己在课设的过程中对去两点之间最短路径和途径多景点之间的最短路径以及两点之间的所有路径根据自己的想法和网上的资料进行了修改形成了自己的思想,代码如下 注:在codeblocks上进行的编写,仅供参考!/原创 2018-01-19 16:54:34 · 11350 阅读 · 39 评论 -
算法 acm dfs 油田问题
今天开始学习算法,DFS一个关于油田的问题,具体看问题描述和代码。 问题描述 GeoSurvComp地质调查公司负责探测地下石油储藏。 GeoSurvComp现在在一块矩形区域探测石油,并把这个大区域分成了很多小块。他们通过专业设备,来分析每个小块中是否蕴藏石油。如果这些蕴藏石油的小方格相邻,那么他们被认为是同一油藏的一部分。在这块矩形区域,可能有很多油藏。你的任务是确定有多少不同的...原创 2018-09-17 17:42:24 · 2281 阅读 · 4 评论 -
关于单链表的反转一种复杂的想法
首先声明笔者为在校大学生,最近刚加本校的实验室,这个想法也是在实验室笔试过程中,自己想到的,但是代码编译通过,实现不了,想在写下自己的想法的同时,希望大家帮助我完成这个代码,谢谢。以下为单链表反转的主体思想。 在笔试过程中有一道问题 将单链表反转,笔者当时百思不得其解,于是自己在想的过程中想到了一个特别麻烦的方法 首先在链表其他基本功能完整的前提下,定义三个指针,*p,*q,原创 2017-11-10 18:39:10 · 227 阅读 · 0 评论