顾十方
这个作者很懒,什么都没留下…
展开
-
C语言链表操作详解
为什么要使用链表在未学习链表时,我们常用的存储数据的方式无非就是数组。使用数组存储数据的好处就是查询快,但是它的弊端也很明显:使用前需声明数组的长度,一旦声明长度就不能更改 插入和删除操作需要移动大量的数组元素,效率慢 只能存储一种类型的数据.而链表则可以实现以上这些数组所不具备的功能,此时引入了结构体来实现创建链表的操作。链表的特点:n个节点离散分配 每一个节...原创 2018-12-29 19:01:55 · 146013 阅读 · 52 评论 -
图的应用——弗洛伊德两点最短路径
Dijkstra算法是求图中某一顶点到其余各顶点的最短路径,如果求图中任意一对顶点间的最短路径,则通常使用弗洛伊德算法Floyd算法:运行结果:输入:4 80 1 2 30 1 50 3 71 2 41 3 22 0 32 1 32 3 23 2 1void Floyd(AMGraph G,int path[][MaxVertices]){ ...原创 2019-07-31 12:37:31 · 443 阅读 · 3 评论 -
排序——插入类排序
插入类排序,一般是在一个有序的序列中,插入一个新的元素,要点在于如何找到这个插入的位置。插入类排序包括:直接插入排序,折半插入排序,希尔排序直接插入排序算法思想:每趟将一个待排序的关键字按照其值的大小插入到已经排好的部分有序序列的适当位置上,直到所有关键字都被插入到有序序列中为止。时间复杂度分析:空间复杂度:O(1)最坏情况下,基本操作选取最内层循环中arr[j+1...原创 2019-08-04 12:01:21 · 286 阅读 · 0 评论 -
C语言数据结构——图的邻接表
转载地址:https://blog.csdn.net/qq_39630587/article/details/77409869邻接表数据结构类型如下:#define MaxVertices 100 typedef struct node //建立边表{ int adjvex; //该边所指向的节点位置 node* next; ...转载 2019-07-23 10:57:56 · 4692 阅读 · 4 评论 -
排序——交换类排序
冒泡排序算法思想:数组中第一个元素和第二个元素比较,按照规则进行交换,再让第二个和第三个进行比较,直到最大或最小的那个数交换到最后,一趟冒泡排序完成。以升序为例,冒泡排序主要是让大的下沉,小的上浮,每一趟排序确立一个当前无序序列中最大的那个数,使之下沉。时间复杂度分析: 最坏:整个数组逆序,最内层循环的语句执行(n-1+1)(n-1)/2 = ...原创 2019-08-05 11:51:12 · 678 阅读 · 0 评论 -
拓扑排序——AOV网
特点:顶点表示活动 边表示活动的先后次序,边没有权值 没有回路的有向图结构体定义:typedef struct node //边表{ int adjvex; struct node* next;}ArcNode;typedef struct //顶点表{ int data; int count; ...原创 2019-08-01 13:25:59 · 272 阅读 · 0 评论 -
图的深度遍历
深度优先搜索类似于树的前序遍历同样以如下连通图为例:构建其对应的邻接表:采用深度优先搜素的遍历顺序如下:邻接表深度遍历结果:范例输入:5 71 2 3 4 51 41 31 22 42 33 54 5邻接表深度遍历:void DFS(AdjList *G,int v){ //因为采用头插法创建邻接表,所以需要用栈进行逆序输出 /...原创 2019-07-28 19:38:14 · 413 阅读 · 0 评论 -
图的广度遍历-邻接表
广度优先搜索(又称宽度优先搜索)算法是最简便的图的搜索算法之一,该算法属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。广度优先搜素也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。广度优先搜素类似于树的层次遍历,遍历结果不唯一...原创 2019-07-28 19:47:46 · 1260 阅读 · 0 评论 -
图的应用——最小生成树
最小生成树(minimum spanning tree)是由n个顶点,n-1条边,将一个连通图连接起来,且使权值最小的结构。最小生成树可以用Prim(普里姆)算法或kruskal(克鲁斯卡尔)算法求出。我们将以下面的带权连通图为例讲解这两种算法的实现:Prim(普里姆)算法时间复杂度:O(N^2)(N为顶点数)prim算法又称“加点法”,用于边数较多的带权无向连通图方法:每次找与之...原创 2019-07-28 20:18:27 · 610 阅读 · 0 评论 -
图的应用——迪杰斯特拉最短路径
采用广度优先搜索思想,对有向赋权图寻找最短路径。该算法对于不含负权的有向图来说,是目前已知的最快的单源最短路径算法。时间复杂度:O(n^2)基本原理:不断为为每个顶点 v 保留目前为止所找到的从s到v的最短路径上图为迪杰斯特拉算法应用示意图。起点以左下角的红点,目标是右上角的绿点,中间灰色的倒L型为障碍物。蓝色空圈表示”暂定”,用以搜索下一步;已经填充颜色的表示探访过,图中颜色以红到绿,越...原创 2019-07-28 20:27:24 · 363 阅读 · 1 评论 -
排序——选择类排序
简单选择排序算法思想:从头至尾顺序扫描序列,找出最小的一个关键字,和第一个关键字交换,接着从剩下的关键字中继续这种选择和交换,直至序列有序。时间复杂度分析:空间复杂度:O(1)两层循环的执行次数和初始序列无关,外层循环执行n次,内层循环执行n-1次,总执行次数:(n-1+1)(n-1)/2 = n(n-1)/2,即时间复杂度为O(n^2)代码:void Select_...原创 2019-08-07 12:06:04 · 224 阅读 · 0 评论 -
排序——二路归并排序
算法思想:将无序序列拆分至只有一个关键字的子序列;然后两两归并,直至归并成一个序列时间复杂度分析:共需进行log2n趟排序,每趟排序执行n次归并操作,因此时间复杂度为O(nlog2n);时间复杂度与初始序列无关,平均和最好和最坏时间复杂度都是O(nlog2n)空间复杂度:需要转存整个无序序列,空间复杂度为O(n)代码:void Merge(int arr[],int left...原创 2019-08-07 12:12:58 · 1665 阅读 · 0 评论 -
C语言数据结构——图的邻接矩阵
转载地址:https://blog.csdn.net/qq_39630587/article/details/77374857无向图和有向图在邻接矩阵中的表示方法:无向图和有向图大同小异,在这里只以无向图为例,代码部分通过简单调整即可对应编译有向图邻接矩阵数据类型定义#define MaxVertices 100 //定义最大容量typedef ...转载 2019-07-22 11:41:04 · 3260 阅读 · 1 评论 -
C语言数据结构——线索二叉树
线索二叉树与二叉树的不同在于,线索二叉树多了两个标识域,便于二叉树寻找前驱和后继,使得遍历二叉树的效率大大提高typedef struct tree{ char data; int Ltag,Rtag; struct tree *Lchild,*Rchild;}Tree;其中Ltag和Rtag为标识域,其意义为:如果Ltag = 0,则表示Lchil...原创 2019-07-18 21:23:30 · 351 阅读 · 0 评论 -
C语言数据结构——二叉树
链式存储定义结构体typedef struct tree{ char data; struct tree *Lchild,*Rchild;}Tree;创建二叉树(采用先序遍历创建,也可采用中序或后序遍历创建)1.扫描字符序列,输入字符ch2.如果ch是一个'#'字符,则表明该二叉树为空树,即T为NULL;否则执行以下操作:申请一个节点空间 将ch赋...原创 2019-07-18 20:43:28 · 751 阅读 · 0 评论 -
C语言顺序表操作
#include <stdio.h>#include <stdlib.h>#define MAX_SIZE 10void create(struct link &L); void show(struct link L);void getelem(struct link L,int n);void insert(struct link &L,in...原创 2019-01-01 15:34:34 · 1910 阅读 · 0 评论 -
链表排序
前言:最近总结了一下针对只有头结点的单链表进行排序的几个简单的方法。交换节点:插入排序,冒泡排序,简单选择排序交换数据:快速排序初始化:#include <stdio.h>#include <stdlib.h>#include <stdbool.h>//节点结构struct node{ int val; struc...转载 2019-01-13 20:57:14 · 204 阅读 · 0 评论 -
C严蔚敏数据结构-链栈
链栈的初始化Status InitStack(Stack* &s){ s = (Stack*)malloc(sizeof(Stack)); s->next = NULL; return OK;}元素入栈为入栈元素e分配空间,用指针p指向 将新节点数据域置为e 将新节点插入栈顶 修改栈顶指针为pStatus Push(Stac...原创 2019-01-18 19:21:38 · 358 阅读 · 0 评论 -
C严蔚敏数据结构-顺序栈
1)base为栈底指针,初始化完成后,栈底指针base始终指向栈底的位置,若base的值为NULL,则表示栈结构不存在。top为栈顶指针,其初值指向栈底。每当插入新的栈顶元素时,指针top+1;删除栈顶元素时,指针top-1.因此,栈空时,top和base的值相等,都指向栈底;栈非空时,top始终指向栈顶元素的上一个位置。2)stacksize指示栈可使用的最大容量顺序栈的初始化...原创 2019-01-18 19:24:22 · 622 阅读 · 0 评论 -
C严蔚敏数据结构-链队
链队的初始化生成新节点作为头节点,队头和队尾指向此节点 头节点的指针域置空Status InitQueue(LinkQueue &q){ q.front = q.rear = (Queue*)malloc(sizeof(Queue)); //生成新节点作为头节点,队头和队尾指向此节点 q.front->next = NULL; ...原创 2019-01-22 10:53:22 · 357 阅读 · 0 评论 -
C语言链表的所有相关操作详解
#include <stdio.h>#include <stdlib.h>typedef struct list List;List *create(); void insertNode(List *L,int n);void deleteNode(List *L,int n);List *Listreverse(List *L);void merge(Li...原创 2019-02-26 10:00:49 · 438 阅读 · 0 评论 -
C严蔚敏数据结构-顺序表
顺序表C语言描述#define LIST_INIT_SIZE 80//线性表存储空间的初始分配量#define LISTINCREMENT 10//线性表存储空间的分配增量typedef int ElemType; //为int设置别名typedef struct{ ElemType *elem; //存储空间基址 int length; //当前长度...原创 2019-06-25 10:27:28 · 729 阅读 · 0 评论 -
C严蔚敏数据结构-算法和算法分析
一.算法算法是为了解决某类问题而规定的一个有限长的操作序列。一个算法必须满足一下五个重要特性:有穷性 算法的每个步骤都能在有限时间内完成 确定性 对于每种情况下所应执行的操作,在算法中都有明确的规定 可行性 算法中的所有操作都必须足够基本,都可以通过已经实现的基本操作运算有限次实现 有输入 作为...原创 2019-06-24 09:32:35 · 785 阅读 · 0 评论 -
C严蔚敏数据结构-单链表
单链表的插入时间复杂度:O(n) 查找节点ai-1并由指针指向该节点 生成一个新节点*s 将新节点*s的数据域置为e 将新节点*s的指针域指向节点ai 将节点*p的指针域指向新节点*sStatus ListInsert(List *L,int i,ElemType e) //在指定位置插入数据域为e的节点{ List* p = L,*node; ...原创 2019-06-27 10:16:20 · 948 阅读 · 0 评论 -
C严蔚敏数据结构-循环队列
为解决"假溢出"的问题,将顺序队列变为一个环状的空间,称为循环队列。头尾指针以及队列元素之间的关系不变,只是在循环队列中,头尾指针"依环状增1"的操作可用"模"运算来实现。通过取模,头指针和尾指针就可以在顺序表空间以头尾衔接的方式"循环"移动。对于循环队列不能以头尾指针的值是否相同来判别队列空间是"满"还是"空",通常有两种处理方法: 1.少用一个元素空间,即队列空间大小为m时,...原创 2019-07-04 09:47:57 · 573 阅读 · 0 评论 -
C数据结构-链表习题解析
(1)将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。表中不允许有重复的数据[题目分析]合并后的新表使用头指针Lc指向,pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的第一个结点,从第一个结点开始进行比较,当两个链表La和Lb均为到达表尾结点时,依次摘取其中较小者重新链接在Lc表的最后。如果两个表中的元素相等...原创 2019-07-01 10:07:48 · 707 阅读 · 0 评论 -
C语言——链表排序
单链表排序前言:最近总结了一下针对只有头结点的单链表进行排序的几个简单的方法。交换节点:插入排序,冒泡排序,简单选择排序交换数据:快速排序初始化:#include <stdio.h>#include <stdlib.h>#include <stdbool.h>//节点结构struct node{ int val;...转载 2019-08-24 15:15:29 · 10792 阅读 · 3 评论