C语言学习-13-链表-练习00-创建、遍历动态链表

一、动态链表个人理解
相当于可以动态分配内存空间、分配的内存空间不连续的结构体数组。它分为数据域和指针域两个部分,数据域和通常的结构体一样,指针域中存放了下一个节点的地址。头节点的数据域不存放数据,只有指针域中包含下一个节点的地址信息。尾结点的数据域包含数据,指针域为NULL。

二、动态链表与结构体数组的区别
(1)动态链表支持动态的分配内存空间,需要时进行申请,与结构体数组相比较不会造成内存资源的浪费。
(2)动态链表支持节点的动态扩容缩容,存储的数据行数可以随意变化,与结构体数组相比较更加灵活。

三、示意图
head
数据域(空)
指针域(地址A)
||
节点一(地址A)
数据域(xxx)
指针域(地址B)
||
节点二(地址B)
数据域(xxxx)
指针域(地址C)
||
尾结点(地址C)
数据域(xxxxx)
指针域(NULL)

四、代码实现内容
根据宏定义LINK_LIST_LEN的值创建相应长度的动态链表,并遍历输出链表。(代码中没有释放内存,嘿嘿,还没学到这一步,以后加上)

五、源码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LINK_LIST_LEN 8

struct student
{
    int no;
    char name[7];
    int age;
    struct student *next;
};

void main()
{
    struct student *CreateLinkList(int len);
    void SelectLinkList(struct student *head);

    struct student *head;

    head = CreateLinkList(LINK_LIST_LEN);
    SelectLinkList(head);
}

struct student *CreateLinkList(int len)
{   
    printf("=========================\n");
    printf("create link list len : %d\n",len);
    struct student *head,*p,*q;
    int i; 
    head = (struct student *)malloc(sizeof(struct student));
    p = head;
    for(i=1;i<=len-1;i++)
    {   
        q = (struct student *)malloc(sizeof(struct student));
        q->no = i;
        strcpy(q->name,"lxgzxj");
        q->age = i + 18;
        p->next = q;
        p = q;
        if(i==len-1)
        {   
            p->next = NULL;
        }
    }
    return head;
}

void SelectLinkList(struct student *head)
{
    printf("=========================\n");
    printf("print link list(exclude head)\n");
    struct student *p;
    for(p=head->next;p!=NULL;p=p->next)
    {
        printf("no : %d , name : %s , age : %d\n",p->no,p->name,p->age);
    }

}

六、运行结果
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值