关于链表的一些知识
关于typedef
首先,要说一下 “typedef” :
typedef 工具是一种高级数据特性,它使你能够为某一类型创建你自己的名字。 在返个斱面, 它和 #define 相似, 但是它们具有 3 个不同之处:
- 与 #define 不同, typedef 给出的符号名称仅对于类型,而不是对值。
- typedef的解释由编译器执行,而不是预处理器。
- 虽然它的范围有限,但在其受限范围内,typedef比#define更灵活。
那dypedef是怎么工作的呢?
你只需像定义变量那样就好,再在前面加上关键字typedef就好,例如你想要对一字节的数值使用BYTE这个术语:
typedef unsingned char BYTE;
随后你就可以使用BYTE来定义变量了:
BYTE x,y[10],*z;
敲黑板~该定义的作用域取决于typedef语句所在的位置。如果定义在一个函数内部,它的作用域就是局部的,限定在那个函数里,如果定义在函数外部,它就具有全局作用域。当然,你也可以使用小写字母:
typedef unsigned char byte;
之后
BYTE a,b;
与
char a,b;
两者等价。
what is 链表?
链表是一种常见的数据结构。在数组中存放数据时,要先指定数组中包含的元素个数,即数组长度。如果向这个数组中加入的元素个数超过了数组的长度时,就不能正确保存所有的内容了。这时我们就想要有一种存储方式,它存储元素的个数不受限定,当要添加更多元素时,存储的个数会随之增加,这种方式就是链表。
在链表中,有一个头指针变量,图中的head表示的就是头指针变量,用这个指针变量保存一个地址,这个地址是另一个变量的地址,即,头指针指向一个变量,这个变量称为一个元素。在链表中,一个元素分为两个部分:数据部分和指针部分。数据部分用来存放元素包含的数据,指针部分用来指向下一个元素。最后一个元素的指针指向NULL,表示指向的地址为空。
单链表
如果在链表中,每个结点只有一个指针,所有结点都是单向联系,除了末尾结点指针为空外,每个结点的指针都指向下一个结点,形成一条线性链,则称此结点为单向线性链表或简称单链表。上图则为单链表。
单链表的建立
单链表的建立有头插法和尾插法两种。
头插法
单链表是用户不断申请 存储单元和改变链接关系而得到的一种特殊 数据结构,将链表的左边称为链头,右边称为链尾。头插法建单链表是将链表右端看成固定的,链表不断向左延伸而得到的。头插法最先得到的是尾结点。
s->next=NULL; /* 将头结点赋空*/
q->next=s->next; /*将结点q插入到原首结点之前,头结点之后。*/
s->next=q; /*将头结点重新指向插入的结点。*/
尾插法
若将链表的左端固定,链表不断向右延伸,这种建立链表的方法称为尾插法。尾插法建立链表时,头 指针固定不动,故必须设立一个搜索指针,向链表右边延伸,则整个算法中应设立三个链表指针,即头指针head、搜索指针p2、申请单元指针pl。尾插法最先得到的是 头结点。
s=r; /*将尾指针指向头结点*/
r->next=p;/*将插入的结点放在尾指针后面*/
r=p; /*然后向后移动尾指针*/
r->next=NULL; /*让尾指针指向空*/
谢谢阅读,如有不妥,请多指正~