ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C语言数据结构_创建链表与销毁链表

2022-01-27 09:04:13  阅读:307  来源: 互联网

标签:LinkList 结点 NULL list C语言 链表 数据结构 指针


创建链表

链表的物理存储结构是用一组地址任意的存储单元存储数据

链表结构中,存储的每个数据元素记录都存放到链表的一个结点(node)中,而每个结点之间由指针将其连接在一起。

链表存在以下特征:

1、每一个结点包括两部分:数据域和指针域、其中数据域用来存放数据元素本身的信息,指针域用来存放后继结点的地址。

2、链表逻辑上连续,物理上并不一定连续存储结点。

3、只要获得的头结点,就可以通过指针遍历整条链表

//链表结点用C语言描述:
typedef struct node{
    ElemType data;      //数据域
    struct node *next;      //指针域
}LNode, *LinkList;

定义一个指向LNode类型数据的指针类型变量时,语句LNode *L;LinkList L;是等价的。

建立一个链表的过程可以通过下面代码:

LinkList GreatLinkList(int n){
    //建立一个长度为n的链表
    LinkList p, r, list=NULL;
    ElemType e;
    int i;
    for(i=1; i<=n; i++){
        Get(e);
        p=(LinkList)malloc(sizeof(LNode));
        p->data=e;
        p->next=NULL;
        if(!list)
            list=p;
        else
            r->next=p;
        r=p;
    }
    return list;
}

销毁链表

destroyLinkList()的作用是销毁一个链表list。

1、首先将*list的内容赋值给p,这样p也指向链表的第一个结点,成为了链表的表头

2、然后判断只要p不为空(NULL),就将p指向的下一个结点的指针(地址)赋值给q,并应用函数free()释放掉p所指向的结点,p再指向下一个结点。如此循环,直到链表为空为止。

3、最后将*list的内容置为NULL,这样主函数中的链表list就为空了

void destroyLinkList(LinkList *list) {
    LinkList p, q;
    p=*list;
    while(p){
        q=p->next;
        free(p);
        p=q;
    }
    *list=NULL;
}

标签:LinkList,结点,NULL,list,C语言,链表,数据结构,指针
来源: https://www.cnblogs.com/zonkidd/p/15848312.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有