<求写C语言 创建链表实例子。要最基本的 包括注释。-百科-春风百科
> 百科 > 列表
求写C语言 创建链表实例子。要最基本的 包括注释。
时间:2024-12-23 21:10:57
答案

题目:创建固定长度的单向链表

程序分析:链表是动态分配存储空间的链式存储结构,

其包括一个“头指针”变量,其中第0个结点称为整个链表的头结点,头结点中存放一个地址,该地址指向一个元素,头结点一般不存放具体数据,只是存放第一个结点的地址。

链表中每一个元素称为“结点”,每个结点都由两部分组成:存放数据元素的数据域和存储直接后继存储位置的指针域。指针域中存储的即是链表的下一个结点存储位置,是一个指针。多个结点链接成一个链表。

最后一个结点的指针域设置为空(NULL),作为链表的结束标志,表示它没有后继结点。

使用结构体变量作为链表中的结点,因为结构体变量成员可以是数值类型,字符类型,数组类型,也可以是指针类型,这样就可以使用指针类型成员来存放下一个结点的地址,使其它类型成员存放数据信息。

在创建列表时要动态为链表分配空间,C语言的库函数提供了几种函数实现动态开辟存储单元。

malloc()函数实现动态开辟存储单元:

malloc函数原型为:void *malloc(unsigned int size);

     其作用是在内存的动态存储区中分配一个长度为size的连续空间,函数返回值是一个指向分配域起始地址的指针(类型为void)。如果分配空间失败(如,内存空间不足),则返回空间指针(NULL)

#include

#include

struct LNode

{

int data;

struct LNode *next;

};

/*上面只是定义了一个结构体类型,并未实际分配内存空间

只有定义了变量才分配内存空间*/

struct LNode *creat(int n)

{

int i;

struct LNode *head,*p1,*p2;

/*head用来标记链表,p1总是用来指向新分配的内存空间,

p2总是指向尾结点,并通过p2来链入新分配的结点*/

int a;

head=NULL;

for(i=1;i<=n;i++)

{

p1=(struct LNode *)malloc(sizeof(struct LNode));

/*动态分配内存空间,并数据转换为(struct LNode)类型*/

printf("请输入链表中的第%d个数:",i);

scanf("%d",&a);

p1->data=a;

if(head==NULL)/*指定链表的头指针*/

{

head=p1;

p2=p1;

}

else

{

p2->next=p1;

p2=p1;

}

p2->next=NULL;/*尾结点的后继指针为NULL(空)*/

}

return head;/*返回链表的头指针*/

}

void main()

{

int n;

struct LNode *q;

printf("请输入链表的长度:/n");

scanf("%d",&n);

q=creat(n);/*链表的头指针(head)来标记整个链表*/

printf("/n链表中的数据:/n");

while(q)/*直到结点q为NULL结束循环*/

{

printf("%d ",q->data);/*输出结点中的值*/

q=q->next;/*指向下一个结点*/

}

}

推荐
© 2024 春风百科