C编程之链表

========================================================================

                                                      理解链表的结构

========================================================================

使用链表或者队列等数据结构时通常会使用动态内存存储数据。链表是一种动态地进行存储分配的一种结构,是根据需要开辟内存单元。

创建动态链表就是指在程序执行过程中,从无到有,按照需求开辟结点和输入各结点数据,并建立起前后相链的关系。通常链表中的结点会使用结构体变量这个数据类型的变量,原因在于,这样一个结点就可以表示多个不同数据类型的相关联的信息了。在动态链表中,必须利用指针变量才能实现结点与结点之间相连接,因此在一个结点中应包含一个指针变量,用它存放下一个结点的地址。例如,可以设计这样一个结构体类型:

struct student

{

int num;

int age;

float score;

struct student *next;/*指向链表的下一个结点*/

};

 

在vim编辑器中编写一个简单的C语言程序,实现创建一个学生链表,学会如何动态的分配所需的内存空间,以及如何通过链表,将存储在内存空间中的数据输出到控制台。

 

(1)创建学生链表的全部代码如下:

#include<malloc.h>

#include<stdio.h>

#define LEN sizeof(struct student)

typedef struct student

{

int num;

int age;

float score;

struct student *next; /*指向链表的下一个结点*/

}stu; /*声明结构体类型struct student,并取别名为stu*/

int n;

stu *creat(void) /*创建动态链表函数*/

{

stu *head,*p1,*p2; /*定义结构体类型的指针*/

n=0;

p1=p2=(stu *)malloc(LEN);/*开辟一个内存空间*/

scanf("%d,%d,%f",&p1->num,&p1->age,&p1->score);/*输入结构体类型的数据*/

head=NULL; /*头指针置空*/

while(p1->num!=0) /*判断学号输入是否为0,若是0则跳出循环*/

{

n=n+1;

if(n==1)

head=p1; /*判断是否是输入的第1个数据信息,若是第一个数据信息,则将头指针指向p1*/

else

p2->next=p1; /*将p2指向的下一个地址指向p1*/

p2=p1; /*p2指向p1*/

p1=(stu *)malloc(LEN);/*再次为p1开辟一个内存空间,存储下一个数据*/

scanf("%d,%d,%f",&p1->num,&p1->age,&p1->score);

}

p2->next=NULL; /*p2指向下一个地址指向的是空指针*/

return(head); /*返回数据信息的头指针,以便从头输出*/

}

int main()

{

stu *p,*head;

head=creat();

p=head; /*p指向头指针*/

if(head!=NULL) /*判断头指针是否为空,不为空则执行循环体输出信息*/

do

{

printf("%d,%d,%f\n",p->num,p->age,p->score);

p=p->next;

}while(p!=NULL);

return 0;

}

这个程序实现了将学生的学号、年龄和成绩三项信息,动态的存储在链表中,根据需要可以输入任意多名学生的信息,直到输入0时,结束输入,此时,会在终端显示出学生的存储信息。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值