链表C语言中使用数组时数组的长度由定义说明整个程序中_第1页
链表C语言中使用数组时数组的长度由定义说明整个程序中_第2页
链表C语言中使用数组时数组的长度由定义说明整个程序中_第3页
链表C语言中使用数组时数组的长度由定义说明整个程序中_第4页
链表C语言中使用数组时数组的长度由定义说明整个程序中_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言中使用数组时,数组的长度由定义说明,整个程序中固定不变。C语言中不允许动态数组类型。但在实际应用中,所需的内存空间取决于实际输入的数据,而无法预先确定。显然用数组的办法很难解决。为了解决上述问题,C语言提供了一些内存管理函数,这些内存管理函数可以按需要动态地分配内存空间,也可把不再使用的空间回收待用。此时引入链表,本节将介绍链表的定义及其应用。7.6链表7.6.1链表的定义相同类型的结点占有同样大小的内存空间,在使用过程中,为了解决结点数目动态变化问题,链表是一种有效的解决方法。例如使用动态存储的方法解决学生数目变化的情况。有一个学生就分配一个结点,无须预先确定学生的准确人数,某学生退学,可删去该结点,并释放该结点占用的存储空间。从而节约了宝贵的内存资源。另一方面,用数组的方法必须占用一块连续的内存区域。而使用动态分配时,每个结点之间可以是不连续的(结点内是连续的)。结点之间的联系可以用指针实现。即在结点结构中定义一个成员项用来存放下一结点的首地址,这个用于存放地址的成员,常把它称为指针域。可在第一个结点的指针域内存入第二个结点的首地址,在第二个结点的指针域内又存放第三个结点的首地址,如此串连下去直到最后一个结点。最后一个结点因无后续结点连接,其指针域可赋为0。这样一种连接方式,在数据结构中称为“链表”。链表的简单示意如图7-1:图7-1链表示意图图7-1中,第0个结点称为头结点,它存放有第一个结点的首地址,它没有数据,只是一个指针变量。以下的每个结点都分为两个域,一个是数据域,存放各种实际的数据,如学号num,姓名name,性别sex和成绩score等。另一个域为指针域,存放下一结点的首地址。链表中的每一个结点都是同一种结构类型。例如,一个存放学生学号和成绩的结点应为以下结构:structstu{intnum;intscore;structstu*next;}前两个成员项组成数据域,后一个成员项next构成指针域,它是一个指向stu类型结构的指针变量。7.6.2链表的常用操作链表的基本操作对链表的主要操作有以下几种:建立链表;结构的查找与输出;插入一个结点;删除一个结点;下面通过例题来说明这些操作。【例7-16】建立一个三个结点的链表,存放学生数据。为简单起见,我们假定学生数据结构中只有学号和年龄两项。可编写一个建立链表的函数creat。#defineNULL0#defineTYPEstructstu#defineLENsizeof(structstu)structstu{intnum;intage;structstu*next;};TYPE*creat(intn){structstu*head,*pf,*pb;inti;for(i=0;i<n;i++){pb=(TYPE*)malloc(LEN);printf("inputNumberandAge\n");

scanf("%d%d",&pb->num,&pb->age);

if(i==0)pf=head=pb;elsepf->next=pb;pb->next=NULL;pf=pb;}return(head);}在函数外首先用宏定义对三个符号常量作了定义。这里用TYPE表示struct

stu,用LEN表示sizeof(struct

stu)主要的目的是为了在以下程序内减少书写并使阅读更加方便。结构stu定义为外部类型,程序中的各个函数均可使用该定义。creat函数用于建立一个有n个结点的链表,它是一个指针函数,它返回的指针指向stu结构。在creat函数内定义了三个stu结构的指针变量。head为头指针,pf为指向两相邻结点的前一结点的指针变量。pb为后一结点的指针变量。【例7-17】链表的建立与内容输出。#include<stdio.h>structdate{intyear,month,day;structdate*next;};intmain(){structdated1={2010,10,10,0};structdated2={2010,12,31,0};structdated3={2011,1,1,0};structdate*p=&d1;d1.next=&d2;d2.next=&d3;d3.next=NULL;while(p!=NULL){pr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论