- 博客(21)
- 资源 (2)
- 收藏
- 关注
原创 关于为什么不能在头文件中包含变量定义的解释
其实,并不是C语言标准不允许在头文件中包含变量定义,而是编译器本身产生了重复定义的错误。 这时候有些人会很奇怪,我不是写了#ifndef #define #endif这样的命令了吗? 如果你这样以为,就和笔者一开始犯了同样的错误,没有深入地理解#ifndef,#ifndef只是预编译,还没有开始真正的编译,他只能防止同一个编译单元下,重复include同一个头文件而导致的重复定...
2018-03-10 16:07:55
1667
原创 【数据结构和算法】Day 17
将单链表中终端节点的指针端由空指针改为指向头节点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环列表,简称循环列表。循环列表的主要差异就在于循环的判断空列表的条件上,原来判断head->next是否为NULL,现在则是head->next是否等于head终端节点用尾指针rear指示,则查找终端结点的结果是O(1),而开始结点是rear->naxt->naxt,当然
2017-09-05 18:50:01
335
原创 基于C语言的线性表操作,包含单链表和顺序线性表两种类型
用了四天的闲余时间,终于写完了线性表的顺序和链式两种结构的代码,进度有些慢,因为的确遇到了一些问题,也学到了一些知识,上传代码,同时代码同步更新到我创建的项目里,欢迎指出代码或者算法等等的不足和修改意见!项目链接:https://code.youkuaiyun.com/a894554149/link_based_on_c/tree/master/*顺序存储结构的线性表操作函数*/#i
2017-09-02 11:59:22
816
原创 关于结构体二级指针引用时必须加括号的问题 (*L)->next,而不是*L->next
今天一天的时候都耗在了单链表的操作函数的编写上了,其实本来应该是一件很简单的事情,但是由于一个优先级的错误,导致了我调试了很久先说下结论,结构体的二级指针在调用时,必须加上括号,因为*(取值)运算优先级是比->来的低的。再来说下发现过程,写了很久的程序,产生了各种编译错误,排除好多粗心和手误的错误外,还有一个错误让我百思不得解,代码及错误提示为: 错误代码: *
2017-09-01 19:16:33
5945
原创 【数据结构和算法】Day 16
静态链表删除操作,如图所示,我们要删除的元素是C删除之后的结果为下图:我们可以看到,删除也是分为两步进行的操作:第一步为静态链表的游标传递,将删除所要删除的元素的游标传递给上一个元素的游标(如图所示,C的游标值3传递给了B的游标,删除C后,B的游标值变为了3)。第二部为备用链表的游标传递,将删除后的元素回收到备用链表,即将数组第一个元素的游标传递给所删除
2017-08-29 20:10:04
229
原创 【数据结构和算法】Day 15
静态链表的插入操作:每当要进行插入操作时,便可以从备用链表上取得第一个结点作为待插入的新节点。结合图片来说,这里我们假设要在A后面插入B:插入完成之后:先将整个数组的第一个元素的游标改为B即将插入位置的游标,即将下标为0的元素的游标由5改为6,这一步叫获得空闲分量。然后将B插入到备用链表上的第一个元素,并将A的游标改为B的下标,B的游标改为C的下标,这一步才是真正的插入
2017-08-29 19:06:57
244
原创 【数据结构和算法】Day 14
静态链表:用数组描述的链表叫做静态链表,因为数组在声明的时候就必须知道要占多大的空间,这种描述方法叫做游标实现法。实现代码:#define MAXSIZE 1000typedef struct { Elemtype data; //数据 int cur; //游标(Cursor)}Component, StaticLinkList[MAXSIZE];
2017-08-28 20:35:56
278
原创 【数据结构和算法】Day 13
单链表整表删除操作的实现代码Status ClearList(LinkList *L){ LinkLisk p,q; p = (*L)->next; while(p) { q = p->next; free(p); p = q; } (*L)->next = NULL; retur
2017-08-28 20:32:04
267
原创 【数据结构和算法】Day 12
对于顺序存储结构的线性表的整表创建,我们可以用数组的初始化来直观理解。而单链表和顺序存储结构就不一样了,它不像顺序存储结构数据这么集中,它的数据可以是分散在内存各个角落的,它的增长也是动态的。创建单链表的过程是一个动态生成链表的过程,从“空表”的初始状态起,依次建立各元素结点并逐个插入链表。头插法建立单链表:从一个空表开始,生成新节点,读取数据存放到新节点的数据
2017-08-27 20:38:09
211
原创 【数据结构和算法】Day 11
单链表ListInsert操作的实现代码/*初始条件:链式线性表L已存在,1 <= i <= Listlength(L) */ /*操作结构:在L中第i个位置之前插入新的数据元素e,L的长度加1 */ Status ListInsert( LinkList *L, int i, ElemType e ) { int j; LinkList p, s;
2017-08-27 17:14:38
435
原创 【数据结构和算法】Day 10
头节点的数据域一般不记录信息。注意区分头结点和头指针的区别:1)头指针:是指链表指向第一个节点的指针,若链表有头结点,则是指向头结点的指针。头指针具有标识作用,所以常用头指针冠以链表名字(指针变量的名字)。无论链表是否为空,头指针均不为空。头指针是链表的必要元素。2)头结点:头结点是为了操作的统一和方便而设立的,放在第一个元素的结点之前,其数据域一般
2017-08-27 15:40:44
288
原创 【数据结构和算法】Day 9
实现ListDelete操作的具体代码/*初始条件:顺序线性表L已存在,1 <= i <= Listlength(L)。 */ /*操作结果:删除L的第i个数据元素,并用e返回其值,L长度-1。 */ Status ListDelete(SqList *L, int i, ElemType *e) { int k; if( L->length ==
2017-08-27 11:24:31
395
原创 【数据结构和算法】Day 8
线性表有两种物理存储结构:顺序存储结构和链式存储结构。顺序存储结构:指的是用一段地址连续的存储单元依次存储线性表的数据元素,其结构代码如下。#define MAXSIZE 20typedef int Elemtype;typedef struct{ ElemType data[MAXSIZE]; int length; //线性表当前长度}SqList
2017-08-26 19:37:09
263
原创 【数据结构和算法】Day 7
线性表的抽象数据类型定义:ADT 线性表(List)Data 线性表的数据对象集合为{a1,a2,...,an},每个元素的类型均为DataType。其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每一个元素有且只有一个直接后继元素。数据元素之间的关系是一对一的关系。Operation InitList(*L):初始化操作,建立一个空的线性
2017-08-26 18:32:15
371
原创 【数据结构和算法】Day 6
线性表(List):由零个或多个数据元素组成的有限序列。数学语言定义:若将线性表记为(a1,...,ai-1,ai,ai+1,...,an),则表中的ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。关键点:1)线性表是一个序列,也就是说元素之间是有先后顺序的。2)若元素存在多个,则第一个元素无前驱,而最后一个元素
2017-08-26 14:38:30
388
原创 【数据结构和算法】Day 5
int i, j;for( i=0; i < n; i++ ){ function(i);}void function(int count){ printf( "%d" , count);}函数体是打印这个参数,这很好理解。function函数的时间复杂度是O(1),所以整体的时间复杂度就是循环的次数O(n)。int i, j;for( i=0;
2017-08-26 13:31:36
267
原创 【数据结构和算法】Day 4
算法时间复杂度:在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间度量,记作:T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。用大写的O()来体现算法时间复
2017-08-26 10:53:32
444
原创 【数据结构和算法】Day 3
算法效率的度量方法:1)事后统计法:这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。2)事前分析估算法:在计算机程序编写前,依据统计方法对算法进行估算。影响高级语言程序运行时间的因素:1)算法采用的策略,方案2)编译产生的代码质量3)问题的输入规模4)机器执行指令的速度由此可见
2017-08-25 20:43:40
250
原创 【数据结构和算法】Day 2
算法的五个基本特征:输入、输出、有穷性、确定性、可行性。1)输入:算法具有零个或多个输入。2)输出:算法至少有一个或多个输出。3)有穷性:指算法在执行有限的步骤之后,自动结束而不会出现无限循环。4)确定性:算法的每一个步骤都具有确定的含义,不会出现二义性。5)可行性:算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有
2017-08-25 20:40:54
261
原创 【数据结构和算法】Day 1
数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科。程序设计 = 数据结构 + 算法简单来说,数据结构研究的是一种关系,就是数据元素相互之间存在的一种或多种特定关系的集合。传统上,数据结构分为逻辑结构和物理结构逻辑结构是指数据对象中的数据元素之间的相互关系,也是数据结构关注的重点。物理结构是指
2017-08-25 20:14:20
207
翻译 劝学
君子曰:学不可以已。青,取之于蓝,而青于蓝;冰,水为之,而寒于水。木直中绳,輮以为轮,其曲中规。虽有槁暴,不复挺者,輮使之然也。故木受绳则直,金就砺则利,君子博学而日参省乎己,则知明而行无过矣。吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。登高而招,臂非加长也,而见者远;顺风而呼,声非加疾也,而闻者彰。假舆马者,非利足也,而致千里;假舟楫者,非能水也,而
2017-08-16 21:48:07
148
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人