C_lab8-3_单链表操作_answer 下载本文

内容发布更新时间 : 2024/12/28 20:37:26星期一 下面是文章的全部内容请认真阅读。

实验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()

{ }

while( (c=getchar() ) != '\\n' ) { }

while(top) { }

p=top;

top= top->link; putchar(p->info); free(p);

p= (struct node *)malloc(sizeof(struct node));

p->info = c ; p->link = top; top = p ;

struct node {

char info;

struct node * link;

}*top, *p; char c; top=NULL;

3. 已知head指向不带头结点的单向链表的第一个结点,以下函数完成的功能是:向降序

单向链表中插入一个结点,使得插入后链表仍保持降序,请填空完成程序设计

#include struct node { };

struct node * insert (struct node * head, struct node * stud) {

struct node * p0, *p1, *p2; p1= head; p0 = stud; if(head == NULL) { int info;

struct node * link;

}

}

head = p0; p0->link = NULL;

else { }

if(p0->infor >= p1->info) { } else { }

return (head);

p1->link = 0; p0->link = NULL; if(head ==p1 ) { } else { }

p0->link = p1; p2->link = p0; p0->link = head; head = p0;;

while((p0->info < p1->info) && (p1->link!=NULL)) { }

p2= p1; p1= p1->link;

4. 已知head指向单链表的第一个结点,以下函数del完成从单向链表中删除值为num

的第一个结点,请观察以下程序片段,该链表是否带有头结点? 不带 。填空完成程序设计,

#include struct node { };

struct node * del(struct node * head, int num)

int info;

struct node * link;