C语言程序设计(第二版)课件作者王曙燕章节ap9指针.pptVIP

  • 4
  • 0
  • 约2.18万字
  • 约 72页
  • 2017-11-12 发布于广东
  • 举报

C语言程序设计(第二版)课件作者王曙燕章节ap9指针.ppt

链表特点: 每个结点只有一个指针,所有结点都是单线联系; 除了末尾结点指针为空外,每个结点的指针都指向 下一个结点(环环相扣,形成一条线性表) “单向线性链表”或“单向链表” data1 data2 data3 data4 表尾结点 head 头指针 1000 1030 1060 1090 1030 1000 1060 1090 1280 1170 1560 1090 1280 1170 1560 1090 data1 data2 data3 data4 表尾结点 表尾结点:最后一个结点。结点指针域为”NULL”空指针,表示链表结束 头指针:是一个指针变量,用来存放第一个结点的地址 链表各结点之间的顺序关系由指针来确定,并不要求逻辑上相邻的结点物理位置上也相邻(链表不需占用连续的内存空间),依靠指针将它们连接起来。 随着处理数据量的增加,链表可以不受变量定义的限制无限的延长——插入、删除操作简化,只修改结点间的链接 head 头指针 1000 1030 1060 1090 1030 1000 1060 1090 1280 1170 1560 1090 1280 1170 1560 1090 建立和输出链表 结点的数据类型选用结构体类型 typedef struct stud { char num[10]; int score; struct stud *next; } student; 建立链表就是根据需要一个一个地开辟新结点,在结点中存放数据并建立结点之间的链接关系。 例如:写一个函数建立一个有n名学生数据的单向动态链表,并写一个函数打印学生信息。 student * creat(int n) { student *head,*p,*q; int i; if(n0) { head=(student *)malloc(sizeof(student)); printf(please input the no 1 num,score ); scanf(%s%d, head-num,head-score); p=head; for(i=2;i=n;i++) { q=(student *)malloc(sizeof(student)); printf(please input the no %d num,score ,i); scanf(%s%d, q-num,q-score); p-next=q; p=q; } q-next=NULL; } else head=NULL; return head; } /*依次创建其他结点*/ /*创建首结点*/ void output(student * head) { student *p; p=head; while(p!=NULL) { printf(%s,%d\n,p-num,p-score); p=p-next; } } main() { student * head; int n; printf(pleae input n:); scanf(%d,n); head=creat(n); output(head); } /*依次向后移动*/ 链表的查找:在链表中查找某成员值为给定值的结点 遍历+比较,返回值为指针类型(指向查到结点的指针) p p p 21 18 30 75 42 56 ∧ head student *find(student *head) { student *p=head; char num[10]; printf(请输入要查找的学号:); scanf(%s,num); while(p!=NULL) { if(p-num==num) return p; p=p-next; } return NULL; } p-data=30 链表结点的删除:在链表中删除某成员值为给定值的结点 遍历+比较+删除 ai-1 ai ai+1 ai-1 算法: 当要删除的是第一个结点 当要删除的非第一个结点 未找到要删除的结点 技巧:两个指针变量,p指向当前结点,pre为p的前驱结点 链表是 否为空 是,终止程序 否 找到 student * delete_node(student *head, char x[]) { studen

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档