结构体与共用体05 - 零基础入门学习C语言57
2011-03-28 02:55
621 查看
第十章:结构体与共用体05
让编程改变世界Change the world by program
对链表结点的删除操作实现
实现源代码:[codesyntax lang="c"]
#include <stdio.h> #include <malloc.h> #include <stdlib.h> #define LEN sizeof(struct student) // student结构的大小 struct student *creat(); // 创建链表 struct student *del( struct student *head, int num); // del函数用于删除结点, *head即链表 // 的头指针, num是要删除的结点num。 void print(struct student *head); // 打印链表 struct student { int num; float score; struct student *next; }; int n; // 全局变量,用来记录存放了多少数据。 void main() { struct student *stu, *p; int n; stu = creat(); p = stu; print( p ); printf("Please enter the num to delete: "); scanf("%d", &n); print( del(p, n) ); printf("nn"); system("pause"); } struct student *creat() { struct student *head; struct student *p1, *p2; p1 = p2 = (struct student *)malloc(LEN); // LEN是student结构的大小 printf("Please enter the num :"); scanf("%d", &p1->num); printf("Please enter the score :"); scanf("%f", &p1->score); head = NULL; n = 0; while( p1->num ) { n++; if( 1 == n ) { head = p1; } else { p2->next = p1; } p2 = p1; p1 = (struct student *)malloc(LEN); printf("nPlease enter the num :"); scanf("%d", &p1->num); printf("Please enter the score :"); scanf("%f", &p1->score); } p2->next = NULL; return head; } void print(struct student *head) { struct student *p; printf("nThere are %d records!nn", n); p = head; if( head ) { do { printf("学号为 %d 的成绩是: %fn", p->num, p->score); p = p->next; }while( p ); } } struct student *del( struct student *head, int num) { struct student *p1, *p2; if( NULL == head ) // 如果头结点指向NULL,这是一个空链表。纯属忽悠T_T { printf("nThis list is null!n"); goto END; } p1 = head; while( p1->num != num && p1->next != NULL) { p2 = p1; p1 = p1->next; } if( num == p1->num ) { if( p1 == head ) // 当将要删除的结点位于头结点的时候 { head = p1->next; } else // 一般情况 { p2->next = p1->next; } printf("nDelete No: %d succeed!n", num); n = n-1; // n是作为一个全局变量,用来记录链表的数据数。 } else { printf("%d not been found!n", num); } END: return head; }
[/codesyntax]
对链表的插入操作
对链表的插入是指将一个结点插入到一个已有的链表中。为了能做到正确插入,必须解决两个问题:
① 怎样找到插入的位置;② 怎样实现插入。
我们可以先用指针变量p0指向待插入的结点,p1指向第一个结点。将p0->num与p1->num相比较,如果p0->num>p1-> num ,此时将p1后移,并使p2指向刚才p1所指的结点。
[caption id="attachment_195" align="aligncenter" width="300"]
对链表的插入操作[/caption]
[caption id="attachment_196" align="aligncenter" width="300"]
对链表的插入操作[/caption]
我们设计出程序: homework_3.c (下载源代码)
但是这个程序有些问题需要大家齐心协力来发掘并研究方法解决!
例如我们要实现多次插入,问题就来了!
课后练习
尝试实现插入程序并尝试制作一个学生成绩管理系统。[buy] 获得所有教学视频、课件、源代码等资源打包 [/buy]
[Downlink href='http://kuai.xunlei.com/d/LITOIYLWFRXQ']视频下载[/Downlink]
相关文章推荐
- 结构体与共用体05 - 零基础入门学习C语言57
- 结构体与共用体02 - 零基础入门学习C语言54
- 结构体与共用体02 - 零基础入门学习C语言54
- 结构体与共用体06 - 零基础入门学习C语言58
- 结构体与共用体06 - 零基础入门学习C语言58
- 结构体与共用体03 - 零基础入门学习C语言55
- 结构体与共用体03 - 零基础入门学习C语言55
- 结构体与共用体04 - 零基础入门学习C语言56
- 结构体与共用体04 - 零基础入门学习C语言56
- 结构体与共用体07 - 零基础入门学习C语言59
- 结构体与共用体07 - 零基础入门学习C语言59
- 结构体与共用体01 - 零基础入门学习C语言53
- 结构体与共用体01 - 零基础入门学习C语言53
- 循环控制结构程序05 - 零基础入门学习C语言20
- 数据类型,运算符和表达式04 - 零基础入门学习C语言05
- 分支程序设计05 - 零基础入门学习C语言14
- 数据类型,运算符和表达式04 - 零基础入门学习C语言05
- 分支程序设计05 - 零基础入门学习C语言14
- 数据类型,运算符和表达式05 - 零基础入门学习C语言06
- 数据类型,运算符和表达式05 - 零基础入门学习C语言06