• 链表的查询

对链表进行各种操作时,需要先对某一个结点进行查询定位。假设数据中没有数据相同的结点,我们可以编写这样一个函数,查找到链表中符合条件的结点,我们在四十三篇的代码中声明搜索结点函数原型:

存储过程 if mysql_结点

在底部编写函数的定义:

存储过程 if mysql_数据_02

功能分析:这个函数的主要功能是查找符合条件的结点,它的主要工作有。

(1)初始化访问指针。

(2)如果访问指针不为空,则判断访问结点的数据是否与给出的数据相同,如果相同,就返回指向当前结点的指针。

(3)反问指针向后后移。并重复第二项工作。

(4)如果所有结点都不匹配,则返回NULL。

  • 插入结点

数组在内存中是顺序存储的,要在数组中插入一个数据就变得很麻烦,必须把后面的数组下标全部依次顺移。然而,链表中各结点的关系是由指针决定的,所以在链表中插入结点要显得方便些,就像是把一条链子一分为二,然后用一个环节再把它们连接起来。

下面我们先对插入结点这个功能作一下具体分析。

(1)必须知道对哪个链表进行操作,所以表头指针head是必须知道的。

(2)为了确定插入位置,插入位置前的结点指针pGuard是必须知道的。

(3)用一个newnode指针来接受新建的结点。

(4)如果要插入的位置是表头,由于操作的是表头指针而不是一个结点,所以要特殊处理。

(5)插入结点的过程中,始终要保持所有的结点都在我们的控制范围内,保证链表的完整性,为了达到这一点,我们采用先连后断的方式:先把新结点与它的后继结点相连,再把插入位置之前的结点与后继结点断开,并与新结点连接。

做完分析,就可以开始编写插入函数了。为了简单起见,我们规定新结点插入位置数据是关键字结点之后,这样就可以使用上面写好的Search函数了,如果结点不在,就插入到表头,实现插入函数如下:

存储过程 if mysql_结点_03