链表的一些知识

关于链表的一些知识

关于typedef

首先,要说一下 “typedef”
typedef 工具是一种高级数据特性,它使你能够为某一类型创建你自己的名字。 在返个斱面, 它和 #define 相似, 但是它们具有 3 个不同之处:

  1. 与 #define 不同, typedef 给出的符号名称仅对于类型,而不是对值。
  2. typedef的解释由编译器执行,而不是预处理器。
  3. 虽然它的范围有限,但在其受限范围内,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;	/*让尾指针指向空*/

谢谢阅读,如有不妥,请多指正~

猜你喜欢

转载自blog.csdn.net/weixin_44109905/article/details/85340053