数据结构C语言版(李云清)实验3 带头结点的单链表

本文详细介绍了使用C语言实现带头结点的单链表的各种操作,包括删除特定节点、链表反转、有序插入、全量删除、排序、合并排序链表、求交集、奇偶分离及查找倒数第k个节点等算法,并提供了测试用例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验3 带头结点的单链表


1、编写函数void delx(linklist head, datatype x),删除带头结点单链表head中第一个值为x 的结点。 并构造测试用例进行测试。

/**********************************/
/*文件名称:lab3_01.c                 */
/**********************************/
#include "slnklist.h"
/*请将本函数补充完整,并进行测试*/
void delx(linklist head,datatype x)
{
   
    linklist pre,p;
    pre=head;
    p=head->next;
    while (p && p->info!=x)         //查找
    {
   
        pre=p;
        p=p->next;
    }
    if (p)                                          //删除
    {
   
        pre->next=p->next;
        free(p);
    }

}

int main()
{
      datatype x;
    linklist head;
    head=creatbyqueue();		/*尾插入法建立带头结点的单链表*/
    print(head);
    printf("请输入要删除的值:");
    scanf("%d",&x);
    delx(head,x);			/*删除单链表的第一个值为x的结点*/
    print(head);
    delList(head);				/*释放单链表空间*/
    return 0;
}

2、假设线性表(a1,a2,a3,…an)采用带头结点的单链表存储,请设计算法函数void reverse(linklist head), 将带头结点的单链表head就地倒置,使表变成(an,an-1,…a3.a2,a1)。并构造测试用例进行测试。

/**********************************/
/*文件名称:lab3_02.c                 */
/**********************************/
#include "slnklist.h"
/*请将本函数补充完整,并进行测试*/
void reverse(linklist head)
{
   
        linklist p,s;
        p=head->next;
        head->next=NULL;
        while (p)
        {
   
            s=p;
            p=p->next;
            s->next=head->next;
            head->next=s;
        }
}
int main()
{
      datatype x;
    linklist head;
    head=creatbystack();			/*头插入法建立带头结点的单链表*/
    print(head);					/*输出原链表*/
    reverse(head);			/*倒置单链表*/
    print(head);					/*输出倒置后的链表*/
    delList(head);
    return 0;
}

3、假设带头结点的单链表head是升序排列的,设计算法函数linklist insert(linklist head,datatype x),将值为x的结点插入到链表head中,并保持链表有序性。分别构造插入到表头、表中和表尾三种情况的测试用例进行测试。

/**********************************/
/*文件名称:lab3_03.c                 */
/**********************************/
#include "slnklist.h"
/*请将本函数补充完整,并进行测试*/
void  insert(linklist head ,datatype x)
{
   
    linklist pre,p,s;
    pre=head;
    p=head->next;
    while (p && p->info<x)
    {
   
        pre=p;
        p=p->next;
    }
    s=(linklist)malloc(sizeof(node
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值