34 结构体的应用(单向链表)
* 温故而知新 ——结构体类型以及动态内存分配 * 1、定义结构体类型friend,成员name和telephone; struct friend{char name[20],telephone[20]}; 2、定义该类型的变量w和指针变量pw,并且赋值, 使得pw指向w; struct friend w,*pw; pw=w; 3、输入w的两个成员,分别用w和pw输入。 scanf(“%s%s”, w.name, pw-telephone); 4、动态申请可以存储以上类型的变量的内存空间, 用指针pw指向该内存; pw=(struct friend *)malloc(sizeof(struct friend)); 5、输入动态申请变量的姓名和电话号码成员值; scanf(“%s%s”,pw-name,pw-telephone); 6、释放动态申请的内存。 free(pw); head 1000 1032 3284 1296 1382 2008 图 动态单向链表示意图 H 3284 A 1296 N 1382 G 2008 E NULL 1000 C 1032 头指针 第一结点 尾结点 结构体的应用——链表 ①链表中每个元素称为一个结点。 ②相邻结点的地址不一定是连续的,依靠指针将它们连接起来。 1. 链表的基本结构 ③构成链表的结点必须是结构体类型数据。 struct node {char c; struct node *next; }; struct node *head; * 建立链表就是根据需要一个一个地开辟新结点,在结点中存放数据并建立结点之间的链接关系。 3. 建立单向链表 * Step1:申请新结点空间; Step2:写入数据; Step3:将新结点链接入链表。 ——尾插法 ——头插法 ——有序插入 q 【例】建立一个学生电话簿的单向链表函数。 3. 建立单向链表——尾插法 头指针h设为NULL 读入一个学生姓名name 当姓名长度不为0 malloc开辟新结点用p指示 strcpy(p-name,name) gets(p-tel) p-next=NULL h==NULL T F h指向第一个 连接新结点 结点 h=p q-next=p q指向新的尾结点 q=p 读入一个学生姓名name 图 建立单向链表 NULL h p ZhangNULL WangNULL p q struct node { char name[20],tel[12]; struct node *next; }*p,*q,*h=NULL; * p q liNULL name “Zhang” “Wang” “Li” “” 100 80 200 100 80 200 ? p ? q 100 100 80 80 200 200 #include stdio.h #include stdlib.h #include string.h struct node *create( void ) { struct node *p,*q,*h=NULL; char name[20]; printf(name: ); gets(name); while (strlen(name)!=0)/* 当输入的姓名不是空串循环 */ { // 开辟新结点 p= (struct node *)malloc(sizeof(struct node)); // 为新结点中的成员赋值 strcpy(p-name,name); printf(tel: ); gets(p-tel); p-next=NULL; * struct node { char name[20],tel[12]; struct node *next; }; //建立链接关系 if (h==NULL) /* h为空,表示新结点为第一个
原创力文档

文档评论(0)