预览加载中,请您耐心等待几秒...
1/2
2/2
在线预览结束,喜欢就下载吧,查找使用更方便
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
一、单链表的建立有了动态内存分配的基础,要实现链表就不难了。所谓链表,就是用一组任意的存储单元存储线性表元素的一种数据结构。链表又分为单链表、双向链表和循环链表等。我们先讲讲单链表。所谓单链表,是指数据接点是单向排列的。一个单链表结点,其结构类型分为两部分:1、数据域:用来存储本身数据2、链域或称为指针域:用来存储下一个结点地址或者说指向其直接后继的指针。例:typedefstructnode{charname[20];structnode*link;}stud;这样就定义了一个单链表的结构,其中charname[20]是一个用来存储姓名的字符型数组,指针*link是一个用来存储其直接后继的指针。定义好了链表的结构之后,只要在程序运行的时候爱数据域中存储适当的数据,如有后继结点,则把链域指向其直接后继,若没有,则置为NULL。下面就来看一个建立带表头(若未说明,以下所指链表均带表头)的单链表的完整程序。#include<stdio.h>#include<malloc.h>/*包含动态内存分配函数的头文件*/#defineN10/*N为人数*/typedefstructnode{charname[20];structnode*link;}stud;stud*creat(intn)/*建立单链表的函数,形参n为人数*/{stud*p,*h,*s;/**h保存表头结点的指针,*p指向当前结点的前一个结点,*s指向当前结点*/inti;/*计数器*/if((h=(stud*)malloc(sizeof(stud)))==NULL)/*分配空间并检测*/{printf("不能分配内存空间!");exit(0);}h->name[0]='\0';/*把表头结点的数据域置空*/h->link=NULL;/*把表头结点的链域置空*/p=h;/*p指向表头结点*/for(i=0;i<n;i++){if((s=(stud*)malloc(sizeof(stud)))==NULL)/*分配新存储空间并检测*/{printf("不能分配内存空间!");exit(0);}p->link=s;/*把s的地址赋给p所指向的结点的链域,这样就把p和s所指向的结点连接起来了*/printf("请输入第%d个人的姓名",i+1);scanf("%s",s->name);/*在当前结点s的数据域中存储姓名*/s->link=NULL;p=s;}return(h);}main(){intnumber;/*保存人数的变量*/stud*head;/*head是保存单链表的表头结点地址的指针*/number=N;head=creat(number);/*把所新建的单链表表头地址赋给head*/}这样就写好了一个可以建立包含N个人姓名的单链表了。写动态内存分配的程序应注意,请尽量对分配是否成功进行检测。本文来自编程入门网:http://www.bianceng.cn/Programming/C/200705/329.htm