实验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
{ }
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 * 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 * del(struct node * head, int num)
int info;
struct node * link;