实验3 带头结点的单链表
1、编写函数void delx(linklist head, datatype x),删除带头结点单链表head中第一个值为x 的结点。 并构造测试用例进行测试。
#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);
print(head);
delList(head);
return 0;
}
2、假设线性表(a1,a2,a3,…an)采用带头结点的单链表存储,请设计算法函数void reverse(linklist head), 将带头结点的单链表head就地倒置,使表变成(an,an-1,…a3.a2,a1)。并构造测试用例进行测试。
#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中,并保持链表有序性。分别构造插入到表头、表中和表尾三种情况的测试用例进行测试。
#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