快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

新蒲京澳门赌场网站:链表的C语言实现之单链表的实现



一、单链表的建立

有了动态内存分配的根基,要实现链表就不难了。

所谓链表,便是用一组随意率性的存储单元存储线性表元素的一种数据布局。链表又分为单链表、双新蒲京澳门赌场网站向链表和轮回链表等。我们先讲讲单链表。所谓单链表,是指数据接点是单向排列的。一个单链表结点,其布局类型分为两部分:

1、数据域:用来存储本身数据

2、链域或称为指针域:用来存储下一个结点地址或者说指向其直接后继的指针。

例:

typedef struct node

{

char name[20];

struct node *link;

}stud;

这样就定义了一个单链表的布局,此中char name[20]是一个用来存储姓名的字符型数组,指针*link是一个用来存储其直接后继的指针。

定义好了链表的布局之后,只要在法度榜样运行的时刻爱数据域中存储适当的数据,如有后继结点,则把链域指向其直接后继,若没有,则置为NULL。

下面就来看一个建立带表头(若未阐明,以下所指链表均带表头)的单链表的完备法度榜样。

#include <stdio.h>

#include <malloc.h> /*包孕动态内存分配函数的头文件*/

#define N 10 /*N为人数*/

typedef stru新蒲京澳门赌场网站ct node

{

char name[20];

struct node *link;

}stud;

stud * creat(int n) /*建立单链表的函数,形参n为人数*/

{

stud *p,*h,*s; /* *h保存表头结点的指针,*p指向当前结点的前一个结点,*s指向当前结点*/

int i; /*计数器*/

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()

{

int number; /*保存人数的变量*/

stud *head; /*head是保存单链表的表头结点地址的指针*/

number=N;

head=creat(number); /*把所新建的单链表表头地新蒲京澳门赌场网站址赋给head*/

}

这样就写好了一个可以建立包孕N小我姓名的单链表了。写动态内存分配的法度榜样应留意,请只管即便对分配是否成功进行检测。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: