首页 理论教育 二级C语言程序设计:结点数据的输出、删除和插入

二级C语言程序设计:结点数据的输出、删除和插入

时间:2023-11-20 理论教育 版权反馈
【摘要】:链表是一种重要的数据结构,可以动态进行数据的存储分配。对链表的操作包括链表的建立,链表节点的插入和删除等。例如,若在a,c,b三个连续节点中删除c,则将指针指向a后,再将a->next=c->next。函数insert_snode中综合运用了“查找”和“前插”的算法。函数insert_snode将对这三种情况进行处理。当链表中存在值为x的结点时,p中的值一定不为‘\0’,语句s->next=p;q->next=s;使新结点插在x结点之前。

二级C语言程序设计:结点数据的输出、删除和插入

链表是一种重要的数据结构,可以动态进行数据的存储分配。对链表的操作包括链表的建立,链表节点的插入和删除等。

(1)插入节点。

例如,若要在节点a、b之间插入c,则需要将指针指向a,然后将c->next=a->next;a->next=c;,便得到a->c->b;

(2)删除节点。

例如,若在a,c,b三个连续节点中删除c,则将指针指向a后,再将a->next=c->next。链表操作的原则:保证操作顺利完成而且不致丢失。

【程序实例】

编写函数insert_snode,它的功能是:在值为x的结点前插入值为y的结点,若值为x的结点不存在,则插在表尾。

函数insert_snode中综合运用了“查找”和“前插”的算法。(www.xing528.com)

由于本例中的单向链表采用了带有头结点的结构,不需要单独处理新结点插在表头的情况,从而简化了操作。

在进行插入操作的过程中,可能遇到三种情况:

①链表非空,值为x的结点存在,新结点应插在该结点之前。

②链表非空,但值为x的结点不存在,按要求,新结点应插在表尾。

③链表为空表,这种情况相当于值为x的结点不存在,新结点应插在表尾,即插在头结点之后,作为表的第一个结点。

函数insert_snode将对这三种情况进行处理。

在函数中,对于空表,在执行p=head->next;后,p的值就为NULL,因此不会进入循环;当表非空时,进入循环,在while循环中,当出现p==‘\0’时,将退出循环,这时p中的值已经是NULL,这意味着查找结束,链表中不存在值为x的结点。对于这两种情况,语句s->next=p;q->next=s;将使新结点插在表尾。当链表中存在值为x的结点时,p中的值一定不为‘\0’,语句s->next=p;q->next=s;使新结点插在x结点之前。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈