栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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

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

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

五、源码

#include
#include
#include
#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 : %dn",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 : %dn",p->no,p->name,p->age);
    }

}

六、运行结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/702508.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号