编写算法函数linklist delallx(linklist head, int x),删除带头结点单链表head中所有值为x的结点。

本文介绍了一种从带头结点的单链表中删除所有值为x节点的算法实现,并提供了完整的C语言源代码示例。该算法通过一次遍历完成节点删除,适用于数据结构学习与实践。
/*
编写算法函数linklist delallx(linklist head, int x),删除带头结点单链表head中所有值为x的结点。

*/

linklist delallx(linklist head,int x)
{
   linklist p=head->next,q=NULL;
   while(p!=NULL)
   {
       while(p->info!=x){q=p;p=p->next;}      //查找x
       if(q==NULL)                                        //要删除的x就在第一个
       {
        head->next=p->next;
       }
       else                                                         
       {
           q->next=p->next;
       }
       p=p->next;
   }
   free(p);                                                //释放p结点
   return head;
}
int main()
{   datatype x;
    linklist head;
    head=creatbyqueue(); /*尾插入法建立带头结点的单链表*/
    print(head);
    printf("请输入要删除的值:");
    scanf("%d",&x);
    head=delallx(head,x);
    print(head);
    delList(head);
    return 0;
}

实验目的 1. 掌握动态链表结构 2. 理解不带头结点单链表的特点及基本操作 3. 掌握单链表表示特定形式的数据的方法,并设计出相关算法 二.实验内容及步骤 1. 编写函数slnklist delx(linklist head, datatype x),删除带头结点单链表head第一个为x 的结点。并构造测试用例进行测试。 linklist delx(linklist head, datatype x) { linklist pre, p; pre = NULL; while (p && p->info != x) { pre = p; p = p->next; } if (p) { if (pre = NULL) head = p->next; else pre->next = p->next; free(p); } return head; } 2.假设线性表(a1,a2,a3,…an)采用不带头结点单链表存储,请设计算法函数linklist reverse1(linklist head)和void reverse2(linklist *head)将不带头结点单链表head就地倒置,使表变成(an,an-1,…a3.a2,a1)。并构造测试用例进行测试。 linklist reversel(linklist head) { linklist p, s; p = head; head = NULL; while (p) { s = p; p = p->next; s->next = head; head = s; } return head; } 3. 假设不带头结点单链表head是升序排列的,设计算法函数linklist insert(linklist head,datatype x),将为x的结点插入到链表head中,并保持链表有序性。分别构造插入到表头、表中和表尾三种情况的测试用例进行测试。 linklist inser(linklist head, datatype x) { linklist pre, p, s; pre = NULL; p = head; while (p && p->info < x) { pre = p; p = p->next; } s = (linklist)malloc(sizeof(node)); s->info = x; if (pre == NULL) { s->next = head; head = s; } else { s->next = p; pre->next = s; } return head; } 4.编写算法函数linklist delallx(linklist head, int x),删除带头结点单链表head中所有为x的结点linklist delallx(linklist head, int x) { linklist pre, p; pre = NULL; p = head; while (p) { while (p && p->info != x) { pre = p; p = p->next; } if (p) { if (pre == NULL) { head = p->next; free(p); p = head; } else { pre->next = p->next; free(p); p = pre->next; } } } return head; } 三.实验总结 主要写通过实验你学到了什么,你设计的程序有没有什么问题,还有没有需要改进的地方?
最新发布
11-17
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值