C_lab8-3_单链表操作_answer

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

{

相关文档
最新文档