C_lab8-3_单链表操作_answer
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验8-3单链表操作
【实验目的】
1.掌握不带有头结点的链表创建的三种方法
2.掌握正确的掌握挂链操作
3.熟练掌握链表中结点的插入删除操作
4.掌握带有头结点的链表与不带有头结点的链表的区分
【实验内容】
Part1:基础练习(课堂练习)
1.已知head指向一个带有头结点的单向链表,链表中每个结点包含一个整型数据域
data和指针域next,以下过程求出链表中所有链结点数据域的和值,请填空完成程序设计。
L23:head->next
L28: p->data
L30: p->next
L33: s
2.以下程序的功能是读入一行字符(如a, …. y, z),按输入时的逆序建立一个不带有头
结点的单向链表,即采用头插法创建链表,然后再逐结点输出,并释放全部结点,请填空完成程序设计。
#include
void main()
{
struct node
{
char info;
struct node * link;
}*top, *p;
char c;
top=NULL;
while( (c=getchar() ) != '\n' )
{
p= (struct node *)malloc(sizeof(struct node));
p->info = c ;
p->link = top;
top = p ;
}
while(top)
{
p=top;
top= top->link;
putchar(p->info);
free(p);
}
}
3.已知head指向不带头结点的单向链表的第一个结点,以下函数完成的功能是:向降序
单向链表中插入一个结点,使得插入后链表仍保持降序,请填空完成程序设计
#include
struct node
{
int info;
struct node * link;
};
struct node * insert (struct node * head, struct node * stud)
{
struct node * p0, *p1, *p2;
p1= head;
p0 = stud;
if(head == NULL)
{
head = p0;
p0->link = NULL;
}
else
{
while((p0->info < p1->info) && (p1->link!=NULL))
{
p2= p1;
p1= p1->link;
}
}
if(p0->infor >= p1->info)
{
if(head ==p1 )
{
p0->link = head;
head = p0;;
}
else
{
p0->link = p1;
p2->link = p0;
}
}
else
{
p1->link = 0;
p0->link = NULL;
}
return (head);
}
4.已知head指向单链表的第一个结点,以下函数del完成从单向链表中删除值为num
的第一个结点,请观察以下程序片段,该链表是否带有头结点?不带。填空完成程序设计,
#include
struct node
{
int info;
struct node * link;
};
struct node * del(struct node * head, int num)
{
struct node *p1, *p2;
if(head == NULL)
{
priintf("list is emptyl!\n");
}
else
{
p1= head;
while((num != p1->info) && (p1->link!=NULL))
{
p2= p1;
p1= p1->link;
}
if(num != p1->info)
{
if(p1==head)
head = head ->link;
else
p2->link = p1=>link;
free(p1);
printf("delete: %d\n", num);
}
else
printf("node %d not been found!\n", num);
}
return (head);
}
Part2:巩固提高(课后实践)
1.已知带有头结点的单链表,链表中每个结点包含字符型数据域data和指针域next,
请编写函数实现链表的逆置。
思路:
1)令p指向第一个结点,此时,从p的角度看,形成一个不带有头结点的链表。
2)令头结点指针域置空,即断开头结点与第一个结点的链接关系,形成头指针与头结
点构成的空链
3)逐结点扫描p链表,每次摘取第一个结点,采用头插法插入2)构成的新链中。
typedef int datatype;
typedef struct node
{