![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
文章平均质量分 61
数据结构与算法
-王二毛-
学无止境
展开
-
C语言数据结构001——数据结构的一些基本概念
程序设计=数据结构+算法数据结构包括:数据的逻辑结构,数据的存储结构,数据的操作算法是描述求解问题方法的操作步骤集合一、数据的逻辑结构:数据元素之间的相互联系方式。1)线性结构:除第一个和最后一个数据元素外,每个数据元素只有一个前驱和一个后继数据元素。2)树状结构:除根结点外,每个数据元素只有一个前驱数据元素,可有0个或若干个后继数据元素。3)图状结构:每个数据元素可有0个或若干个前驱数据元素和0个或若干个后继数据元素。二、数据的存储结构:数据元素在计算机中的存储方式。1)顺序存储结构.原创 2021-06-28 08:00:50 · 389 阅读 · 2 评论 -
C语言数据结构002——线性表的顺序表示
线性表的定义(线性表包含顺序表示和链式表示)线性表是一种由n(n≥0)个相同类型数据元素a0, a1,…, an-1组成的线性结构。可以在任意位置插入和删除数据元素操作;一、顺序表(线性表的顺序表示)顺序存储结构的线性表称作顺序表(Sequence List)。顺序表的存储结构实现顺序存储结构的方法是使用数组。数组把线性表的数据元素存储在一块连续地址空间的内存单元中,这样线性表中逻辑上相邻的数据元素在物理存储地址上也相邻。数据元素间的逻辑上的前驱、后继逻辑关系就表现在数据元素的存储单元的物理前后位原创 2021-06-28 07:18:22 · 446 阅读 · 1 评论 -
C语言数据结构003——线性表的链式表示
一、链表前导知识指针指针(pointer):指向物理存储单元地址的变量,也称为链(link)或引用(reference),指针变量存放一个内存地址。int i, *j;指针的运算取地址运算(&)和对内容进行操作(*)int i,*pi;pi = &i;i = 5;*pi = 10;指针和数组数组名代表数组首地址,就是指针(常指针)int a[5] ; int *p=a; int p=&a[0];引用数组元素(1)下标法: a[3]=7;(2)指针法 :原创 2021-06-28 07:20:04 · 350 阅读 · 1 评论 -
C语言数据结构004——堆栈
一、堆栈的基本概念(1)定义:限定只能在固定一端进行插入和删除操作的线性表。(2)允许进行插入和删除操作的一端称为栈顶,另一端称为栈底。标示栈顶当前位置的变量称为栈顶指示器(栈顶指针)堆栈的插入元素操作称为进栈或入栈,删除元素操作称为出栈或退栈特点:后进先出。作用:可以完成从输入数据序列到某些输出数据序列的转换。二、顺序堆栈顺序堆栈存储结构利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,其结构如图所示:typedef struct{ DataType stack[MaxS原创 2021-06-28 07:26:08 · 2000 阅读 · 3 评论 -
C语言数据结构005——队列
一、队列的基本概念(1)定义:只能在表的一端进行插入操作,在表的另一端进行删除操作的线性表。(2)特点:先进先出示意图如下:二、顺序存储结构的队列有6个存储空间的顺序队列动态示意图顺序队列的“假溢出”问题①假溢出顺序队列因多次入队列和出队列操作后出现的虽有存储空间但不能进行入队列操作的情况。②如何解决顺序队列的假溢出问题?可采取四种方法:1)采用循环队列;2)按最大可能的进队操作次数设置顺序队列的最大元素个数;3)修改出队算法,使每次出队列后都把队列中剩余数据元素向队头方向移动原创 2021-06-28 08:20:36 · 5840 阅读 · 9 评论 -
C语言数据结构——图
一、图的基本概念图是由顶点集合及顶点间的关系集合组成的一种数据结构。vertex, edge图G的定义是: G =(V,E)其中,V = {x|x∈某个数据元素集合}E ={ (x,y)|x,y∈V} (无向图) 或E = { <x, y>|x,y∈V并且Path(x, y)} (有向图)其中,(x,y)表示从 x到 y的一条双向通路,即(x,y)是无方向的;Path(x,y)表示从 x到 y的一条单向通路,即Path(x,y)是有方向的。图的基本术语:(1)顶点和边:原创 2021-10-25 09:03:26 · 2341 阅读 · 0 评论 -
C语言数据结构——树和二叉树
一、树的若干术语1)结点:包括一个数据元素及若干指向其子树的分支;2)结点的度:结点所拥有的子树的个数;3)叶结点:度为0的结点,也称作终端结点;4)分支结点:度不为0的结点;5)孩子结点:树中一个结点的子树的根结点,也叫后继结点;6)双亲结点:若树中某结点有孩子结点,则这个结点就 称作它的孩子结点的双亲结点 ;7)兄弟结点:具有相同的双亲结点的结点;8)树的度:树中所有结点的度的最大值;9)结点的层次:从根结点到树中某结点所经路径上的分支数,根节点层次规定为0;10)树的深度:树中所.原创 2021-07-06 08:45:30 · 571 阅读 · 1 评论 -
C语言数据结构——选择排序
定义排序算法的数据元素的数据结构如下:typedef struct{ KeyType key;}DataType;一、直接选择排序基本思想是:从待排序的数据元素集合中选取关键字最小的数据元素并将它与原始数据元素集合中的第一个数据元素交换位置;然后从不包括第一个位置上数据元素的集合中选取关键字最小的数据元素并将它与原始数据元素集合中的第二个数据元素交换位置;如此重复,直到数据元素集合中只剩一个数据元素为止。算法如下:void SelectSort(DataType a[], int n原创 2021-07-06 08:44:40 · 407 阅读 · 1 评论 -
C语言数据结构——交换排序
定义排序算法的数据元素的数据结构如下:typedef struct{ KeyType key;}DataType;一、冒泡排序算法思想:依次比较相邻的两个记录的关键字,若两个记录是反序的(即前一个记录的关键字大于后前一个记录的关键字),则进行交换,直到没有反序的记录为止。(1)首先将L->R[0]与L->R[1]的关键字进行比较,若为反序(L->R[0]的关键字大于L->R[1]的关键字),则交换两个记录;然后比较L->R[1]与L->R[2]的关键字,原创 2021-07-06 08:44:16 · 1336 阅读 · 1 评论 -
C语言数据结构——插入排序
定义排序算法的数据元素的数据结构如下:typedef struct{ KeyType key;}DataType;一、直接插入排序基本思想是:1)将待排序的记录Ri+1,插入到已排好序的记录表R0, R1 ,…., Ri中,得到一个新的、记录数增加1的有序表。 直到所有的记录都插入完为止。2)设待排序的记录顺序存放在数组R[0…n]中,在排序的某一时刻,将记录序列分成两部分:R[0…i]:已排好序的有序部分;R[i+1…n]:未排好序的无序部分。显然,在刚开始排序时,R[0]是已经原创 2021-07-03 23:25:17 · 588 阅读 · 2 评论 -
C语言数据结构——归并排序
定义排序算法的数据元素的数据结构如下:typedef struct{ KeyType key;}DataType;归并排序主要是二路归并排序基本思想是:可以把一个长度为n 的无序序列看成是 n 个长度为 1 的有序子序列 ,首先做两两归并,得到 n / 2 个长度为 2 的有序子序列 ;再做两两归并,…,如此重复,直到最后得到一个长度为 n 的有序序列。一次二路归并排序算法如下:void Merge(DataType a[], int n, DataType swap[],原创 2021-07-03 23:24:58 · 217 阅读 · 0 评论 -
C语言数据结构——基数排序(也称作桶排序)
定义排序算法的数据元素的数据结构如下:typedef struct{ KeyType key;}DataType;基数排序基本思想是:设待排序的数据元素关键字是m位d进制整数(不足m位的关键字在高位补0),设置d个桶,令其编号分别为0,1,2,…,d-1。首先按关键字最低位的数值依次把各数据元素放到相应的桶中,然后按照桶号从小到大和进入桶中数据元素的先后次序收集分配在各桶中的数据元素,这样就形成了数据元素集合的一个新的排列,我们称这样的一次排序过程为一次基数排序;再对一次基数排序得到的原创 2021-07-03 23:24:28 · 424 阅读 · 2 评论 -
C语言数据结构——排序
一、排序的基本概念排序是对数据元素序列建立某种有序排列的过程,是把一个数据元素序列整理成按关键字递增(或递减)排列的过程。学生成绩表关键字是要排序的数据元素集合中的一个域,排序是以关键字为基准进行的。主关键字(key)数据元素值不同时该关键字的值也一定不同,是能够惟一区分各个不同数据元素的关键字;不满足主关键字定义的关键字称为次关键字。内部排序是把待排数据元素全部调入内存中进行的排序。外部排序是因数量太大,把数据元素分批导入内存,排好序后再分批导出到磁盘和磁带外存介质上的排序方法。二原创 2021-07-03 23:24:06 · 745 阅读 · 0 评论 -
C语言数据结构——查找(检索)
一、查找的基本概念查找:查询某个关键字是否在(数据元素集合)表中的过程。也称作检索。查找表: 由同一类型的数据元素(或记录)构成的集合。主关键字: 能够惟一区分各个不同数据元素的关键字次关键字: 通常不能惟一区分各个不同数据元素的关键字查找成功: 在数据元素集合中找到了要查找的数据元素查找不成功:在数据元素集合中没有找到要查找的数据元素静态查找: 只查找,不改变数据元素集合内的数据元素动态查找: 既查找,又改变(增减)集合内的数据元素静态查找表: 静态查找时构造的原创 2021-06-28 08:22:27 · 2180 阅读 · 0 评论 -
C语言数据结构——静态查找顺序查找
顺序查找基本思想:从顺序表的一端开始,用给定数据元素的关键字逐个和顺序表中各数据元素的关键字比较,若在顺序表中查找到要查找的数据元素,则查找成功,函数返回该数据元素在顺序表中的位置;否则查找失败,函数返回-1。#include "SeqList.h"int SeqSearch(DataType a[], int n, KeyType key)//在a[0]--a[n-1]中顺序查找关键码为key的数据元素//查找成功时返回该元素的下标序号;失败时返回-1{ int i = 0; wh原创 2021-06-28 08:21:32 · 280 阅读 · 0 评论