C - lab10-3 - 单链表操作 下载本文

课程:C语言程序设计 学号: 姓名: 班级:

实验10-3 单链表操作

【知识点回顾】

1. 一般C程序创建步骤

1) 编辑源文件

2) 编译源文件,产生目标文件 3) 链接库文件,产生可执行文件 4) 运行可执行文件

5)

【典型例题】

1. 例题1, 2. 例题2,

3. 例题3,

【Q&A】

1. Q:?

A:。 2. Q:? A:

【实验内容】

1. 已知带有头结点的单链表,链表中每个结点包含字符型数据域data和指针域next,请

编写函数实现链表的逆置。 思路:

令p指向第一个结点,此时,从p的角度看,形成一个不带有头结点的链表。

令头结点指针域置空,即断开头结点与第一个结点的链接关系,形成头指针与头结点构成的空链

逐结点扫描p链表,每次摘取第一个结点,采用头插法插入2)构成的新链中。

2. 已知head指向一个带头结点的单向链表,链表中每个结点包含字符型数据域data和指

针域next。请编写函数实现在值为a的结点前插入值为key的结点,若值为a的结点不存在,则插在链表最后。

1

课程:C语言程序设计 学号: 姓名: 班级:

typedef char datatype; typedef struct node {

datatype data; struct node * next; } linklist;

【课后练习】

3. 已知head指向一个带有头结点的单向链表,链表中每个结点包含一个整型数据域data和指针域next,以下过程求出链表中所有链结点数据域的和值,请填空完成程序设计。

4. 以下程序的功能是读入一行字符(如a, …. y, z),按输入时的逆序建立一个不带有头结

点的单向链表,即采用 法创建链表,然后再逐结点输出,并释放全部结点,请填空完成程序设计。

#include void main() {

struct node {

char info;

struct node * link;

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

while( (c=getchar() ) ) {

p= ;

p->info = ;

2

课程:C语言程序设计 学号: 姓名: 班级:

}

p->link = ; top = ;

while(top) { } }

; top= top->link;

putchar( ); free(p);

5. 已知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) { } else { }

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

if(head ==p1 ) {

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

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

3

课程:C语言程序设计 学号: 姓名: 班级:

} else { }

return (head); }

p1->link = 0;

; } else { }

; p2->link = p0;

; head = p0;;

6. 已知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) { } else {

p1= head;

while( ) { }

if(num != p1->info) {

p2= p1; p1= p1->link; priintf(\

4

课程:C语言程序设计 学号: 姓名: 班级:

}

if(p1==head)

else free(p1);

printf(\

else

printf(\

}

return (head); }

5