数据结构和算法
E-C-E
做一个有思想的码农
展开
-
栈的顺序存储结构
栈的顺序存储结构栈的顺序存储结构,主要有:栈顶指针、栈底指针、栈长度组成,通过malloc函数申请一片连续的内存,一般栈都是使用顺序存储结构。栈的特点:先进后出。...原创 2020-04-25 23:22:42 · 170 阅读 · 0 评论 -
算法的时间复杂度
算法的时间复杂度算法的时间复杂度:在进行算法分析时,语句总的执行次数T(n)是关于问题n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间度量,记:T(n)=O(f(n))。他表示随问题n的增加,算法执行时间的增长率和f(n)的增长率相同,f(n)是问题规模的某个函数。一般情况:随着输入规模n的增加,T(n)增加最慢的算法为最优算法。一般表...原创 2019-08-29 21:45:33 · 115 阅读 · 0 评论 -
单链表的整表删除
单链表的整表删除单链表整表删除的算法思路如下:1.声明结点p和q;2.将第一个结点赋值给p,下一结点赋值给q;3.循环执行释放p和将q赋值给p的操作//单链表的整表删除void ClearLinkList(LinkList ){ LinkList p,q; p=(*l)->next; //链表l的第一个元素地址指针 while(p) { q=p-...原创 2019-08-29 22:31:42 · 422 阅读 · 0 评论 -
单链表结构与顺序存储结构优缺点
单链表结构与顺序存储结构优缺点我们分别从存储分配方式、肘间性能、空间性能三方面来做对比。存储分配方式1.顺序存储结构用一段连续的存储单元依次存储线性表的数据元素。2.单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素。可以用到一些内存的边角料。...原创 2019-08-30 22:09:41 · 415 阅读 · 0 评论 -
静态链表
静态链表用数组的方法描述链表叫做静态链表,这种描述方法叫做游标实现法,原创 2019-09-03 20:37:02 · 209 阅读 · 0 评论 -
静态链表的删除操作
静态链表的删除操作//删除l中的第i个元素Status DeletStaticLinkList(StaticLinkList l,int i){ int j,k; k=MAXSIZE-1; //静态链表的最后一个节点 if (i<1||i>ListLength(l)+1) //判断是否符合链表长度 { return err; } for (l =...原创 2019-09-03 21:37:15 · 602 阅读 · 0 评论 -
静态链表的优缺点
静态链表的优缺点原创 2019-09-10 18:40:47 · 3553 阅读 · 0 评论 -
C语言—判断单链表中是否有环
C语言—判断单链表中是否有环单链表有环原创 2019-09-20 21:40:55 · 1484 阅读 · 0 评论 -
C语言例题—两个线性表连接成一个
两个线性表连接成一个例如:线性表a={a1,a2,a3,a4,a5,a6…}和线性表b={b1,b2,b3,b4,b5,b6…}连接成一个线性表。如果用单链表或者有头指针的单链表表示并且完成这种操作,从第一个链表找到an,然后将b1连接到an后面是按复杂度是O(n),但是如果用循环链表的尾节点的尾指针来实现,则时间复杂度为O(1)。分为四步:1.保存a循环链表的头指针2.b的第一个节...原创 2019-09-19 20:57:03 · 1142 阅读 · 0 评论 -
循环链表
循环链表将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表成为单循环链表,简称循环链表循环链表不一定有头结点...原创 2019-09-19 20:14:05 · 141 阅读 · 0 评论 -
单链表面试--找到未知长度的单链表的中间节点
找到未知长度的单链表的中间节点普通方法:1.确定单链表长度L,2.再次找到L/2次的中间节点。快速方法:快慢指针原理:设置两个指针search md都指向单链表的头节点。其中search的移动速度是mid的2倍。当 search指向末尾节点的时候,mid正好就在中间了。这也是标尺的思想。快慢指针要考虑链表长度的奇偶性。status GetMidNode(LinkList I, E...原创 2019-09-19 20:13:23 · 164 阅读 · 0 评论 -
线性表的整表创建
线性表的整表创建对于顺序存储结构的线性表的整表创建,可以用数组的初始化来直观理解。而单链表和顺序存储结构就不一样了,它不像顺序存储结构数据这么集中,它的数据可以是分散在内存各个角落的,他的增长也是动态的对于每个链表来说,它所占用空间的大小和位置是不需要预先分配划定的,可以根据系统的情况和实际的需求即时生成。单链表整表创建的算法思路创建单链表的过程是一个动态生成链表的过程,从“空表”的初...原创 2019-08-29 21:44:31 · 211 阅读 · 0 评论 -
单链表的删除第i个元素
单链表的删除删除操作图示a2的节点q,要实现q的删除,就是让他的前继节点p绕过a2直接指向后继节点a3。p->next=p->next->next;单链表第i个数据删除结点的算法思路:1.声明结点p指向链表第一个结点,初始化j=1;2.当j<i时,就遍历链表,让P的指针向后移动,不断指向下一个结点,j累加1;3.若到链表末尾p为空,则说明第i个元素不存...原创 2019-08-28 18:11:13 · 10800 阅读 · 4 评论 -
单链表的插入第i个元素
单链表的插入单链表第i个数据插入结点的算法思路:1.声明一结点p指向链表头结点,初始化j从1开始;2.当j<i时,就遍历链表,让p的指针向后移动,不断指向下一结点,j累加1;3.若到链表末尾p为空,则说明第立个元素不存在;否则杳找成功,在糸统中生成一个空结点S4.将数据元素e赋值给s->data;然后单链表的插入语句;//假设存储元素e的节点为s,要实现s插入到ai和a...原创 2019-08-28 16:22:12 · 5026 阅读 · 0 评论 -
函数调用的时间复杂度
函数调用的时间复杂度常数阶 O(1) 举例:245087线性阶 O(n) 举例:3n+4平方阶 O(n2) 举例:3n2+4n+5对数阶 O(logn) 举例:3log(2)n+4nlogn阶 O(nlogn) 举例:2n+3nlog(2)n+4立方阶 O(n3) 举例:3n3+n2+4n+5指数阶 O(2n) 举例:2n常用的时间复杂...原创 2019-08-26 20:03:38 · 1077 阅读 · 0 评论 -
线性表
线性表线性表:有零个或者多个数据元素组成的有限序列。零个元素的线性表是空表,强调几个关键地方:1.首先是个序列,也就数元素之间有先来后到的2.若元素多个第一个无前驱,最后一个无后继,其他元素只有个一前驱后继3.线性表强调有限的序列抽象数据类型:一个数学模型及定义在该模型上的一组操作描述抽象数据类型的标准格式:ADT 抽象数据类型Data数据元素之间的逻辑关系的定义oper...原创 2019-08-26 20:06:32 · 86 阅读 · 0 评论 -
线性表的抽象数据类型
线性表的抽象数据类型线性表的抽象数据类型定义:ADT:线性表(list)data线性表的数据对象集合为{a1,a2,…an},每个元素的类型均为datatype,其中除第一个元素a1和最后一个元素an外每一个元素有且只有一个前驱后继,数据元素都是一一对应的关系操作InitList(*L):初始化操作,建立一个空的线性表L。ListEmpty(L):判断一个线性表是否为空,为空返回真...原创 2019-08-26 20:09:59 · 1978 阅读 · 3 评论 -
顺序存储结构
顺序存储结构线性表有两种存储结构:顺序存储结构和链式存储结构。线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。例如:C语言的数组。线性表的顺序存储的结构代码:#define MAXSIZE 20typedef int ElemType;typedef struct{ElemType data[MAXSIZE];int lengt...原创 2019-08-26 20:36:04 · 3432 阅读 · 0 评论 -
获取线性表元素
获得元素的操作实现GetElem的具体操作,即将线性表L中的第i个位置的元素返回 。//得到线性表第i个元素//得到线性表第i个元素typedef int Status;Status GetElem(sqlist l,int i,Status *e){ if((l.length==0)||(i<1)||(i>l.length)) { return err; } ...原创 2019-08-26 20:39:44 · 2128 阅读 · 0 评论 -
插入线性表某个元素操作
插入操作插入操作的算法:-如果插入位置不合理抛出异常,-如果线性表长度大于等于数组长度,则抛出异常或者动态增容。-从最后一个元素向前遍历到第i个元素位置,分别将他们都向后移动一个位置。-要插入的元素填入到第i个位置-线性表长度加一//插入操作Status InsertElem(sqlist *l,int i,Status *e){ int k; if((i<1)||...原创 2019-08-26 20:41:36 · 827 阅读 · 0 评论 -
线性表删除操作
//删除操作Status DeleatElem(sqlist *l,int i){ if ((i<1)||(i>MAXSIZE)) { return err; } if (l->length==MAXSIZE) { return err; } if (i<=l->length) { for (k = i+1; k <= l->...原创 2019-08-26 20:46:40 · 2880 阅读 · 0 评论 -
线性表的链式存储结构
线性表链式存储结构定义:线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以存在内存中未被占用的任意位置。比起顺序存储结构每个数据元素只需要存储一个位置就可以了。现在链式存储结构中,除了要存储数据元素信息外,还要存储它的后继元素的存储地址(指针)。我们把存储数据元素信息的域称为数据域,把存储直接后继位置的域称为指针域。指针域中存储的信息称为指针或链。这两部...原创 2019-08-27 16:17:54 · 1707 阅读 · 0 评论 -
单链表存储结构的代码实现
单链表存储结构的代码实现//可以用C语言结构指针来描述单链表:typedef struct Node{ ElemType data; //数据城 struct Node*Next;//指针域}Node :typedef struct Node* LinkList;代码详解:1.定义一个结构体指针,结构体也是一种数据类型,是数据类型就可以定义变量,定义了一个指针变量。和基...原创 2019-08-27 16:35:48 · 599 阅读 · 0 评论 -
单链表的读取第i个元素的代码实现
单链表的获取第i个元素在单链表中,由于第i个元素到底在哪?我们一开始没办法知道,必须得从第一个结点开始找。算法思路:1.声明一个结点p指向链表第一个结点,初始化j从1开始;2.当j<i,就遍历链表,让p的指针向后移动,不断指向一下结点,j+1;3.若到链表末尾p为空,则说明第i个元素不存在;4.否则查找成功,返回结点p的数据C语言typedef int Status;...原创 2019-08-28 14:53:30 · 7296 阅读 · 0 评论 -
算法的时间复杂度
算法的时间复杂度算法的时间复杂度:在进行算法分析时,语句总的执行次数T(n)是关于问题n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间度量,记:T(n)=O(f(n))。他表示随问题n的增加,算法执行时间的增长率和f(n)的增长率相同,f(n)是问题规模的某个函数。一般情况:随着输入规模n的增加,T(n)增加最慢的算法为最优算法。一般表...原创 2019-08-26 19:59:00 · 254 阅读 · 0 评论