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

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

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);
    }

}

六、运行结果

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5702616.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存