语言程序设计链表课件.ppt

语言程序设计链表课件.ppt

ID:57028968

大小:132.50 KB

页数:36页

时间:2020-07-26

语言程序设计链表课件.ppt_第1页
语言程序设计链表课件.ppt_第2页
语言程序设计链表课件.ppt_第3页
语言程序设计链表课件.ppt_第4页
语言程序设计链表课件.ppt_第5页
资源描述:

《语言程序设计链表课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、§11.7用结构体指针处理链表一、链表概述链表是一种最常见的数据结构,它动态地进行存储分配。数组:必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费。链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。(数组中插入、删除数据项时,需要移动其它数据项)。链表有单向链表、双向链表、环形链表等形式。以单向链表为例、链表有一个“头指针”head,它指向链表的第一个元素。链表的一个元素称为一个“结点”(node)。结点中包含两部分内容,第一部分是结点数据本身,如图中的A、B、C

2、、D所示。结点的第二部分是一个指针,它指向下一个结点。最后一个结点称为“表尾”,表尾结点的指针为空(NULL)。在链表中插入一个结点,比如,在结点A后插入结点P,只需使P指向B,使A指向P。在链表中删除一个结点,比如删除结点C,只需使B指向D,并删除结点C所占内存。因此,链表的插入、删除非常方便。链表结点数据可以用结构体来描述,例如、structstudent      {       int num;       floatscore;       structstudent*next;/*指向下一结点*/      };链表需要动态地进行存储分配,在C语言中,使用以下函数进行动

3、态存储分配和释放。1、void*malloc(size_tsize)  在动态存储区分配长度为size的连续空间,并返回指向该空间起始地址的指针。若分配失败(系统不能提供所需内存),则返回NULL。2、void*calloc(size_tn,size_tsize)   在动态存储区分配n个长度为size的连续空间,并返回指向该空间起始地址的指针。若分配失败(系统不能提供所需内存),则返回NULL。3、voidfree(void*ptr)   释放ptr指向的内存空间。ptr是malloc()或calloc()函数返回的值。注意、(1)上述函数的原型在alloc.h和stdlib.h

4、中定义。在程序中必须包含这两个头文件。(2)size_t是专用于描述内存大小和计数值的数据类型,等于unsignedint。二、建立链表[例11.7] 写一个函数creat(),建立一个有5个学生的单向链表。分析建立过程:设:链表结构为:     structstudent     {      long num;      floatscore;      structstudent*next;     };当输入的num等于零时,表示建立过程结束。定义以下变量:    structstudent*head;/*表头*/    structstudent*p1; /*新建结点*/

5、    structstudent*p2; /*表尾结点*/通过以上分析,可以得到创建链表的算法,其中,n=1表示创建的是第一个结点。程序:#include"stdio.h" #include"alloc.h" #include"stdlib.h"structstudent {  long num;  floatscore;  structstudent*next;  };#defineLENsizeof(structstudent)/*注意,"#defineNULL0"不需要,因为,NULL已在stdio.h中定义*/intn;structstudent*creat()/*创建链

6、表,并返回表头指针*/ {  structstudent*head;/*表头*/  structstudent*p1; /*新建结点*/  structstudent*p2; /*表尾结点*/n=0;/*结点数为0*/  head=NULL;/*还没有任何结点,表头为指向空*/  p1=(structstudent*)malloc(LEN);/*创建一个新结点p1*/  p2=p1;/*表尾p2也指向p1*/scanf("%ld,%f",&p1->num,&p1->score);/*读入第一个结点的学生数据*/while(p1->num!=0)/*假设num=0表示输入结束*/  

7、{   n=n+1;   if(n==1)head=p1;  /*第一个新建结点是表头*/   else    p2->next=p1;/*原表尾的下一个结点是新建结点*/p2=p1;/*新建结点成为表尾*/p1=(structstudent*)malloc(LEN);/*新建一个结点*/   scanf("%ld,%f",&p1->num,&p1->score);/*读入新建结点的学生数据*/  }free(p1);/*对于num=0的结点,未加入链表,应删除其空间

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。