C的链表-简单介绍

来源:互联网 发布:linux百度翻译 编辑:程序博客网 时间:2024/06/11 18:33

C的链表-简单介绍

相关知识: 结构体, 指针, malloc申请内存函数

  • 链表的出现
    在存储数据时, 当数目确定时, 我们可以通过数组或者结构体数组来存储数据.
    当数目不确定时, 可以把数据的长度定义为一个很大的数目, 从而保证有足够的空间存储数据.
    但这种做法会造成空间的浪费, 总会有一部分的空间没被用到.
    因为数组的长度必须是事先确定下常量, 不能为变量, 所以数组已经无法满足我们的需求了.
    于是出现了长度可变链表, 要多少, 拿多少.

  • 链表的介绍
    链表可以想象为环式手链, 每一个环都连着下一个环
    链表也是这样, 我们把链表中的环叫做节点, 节点包括数据域指针域
        数据域存放数据
        指针域存放下一个节点的地址(指针)
    头节点: 链表中的第一个节点
        其数据域一般不存储数据
        其指针域存放第一个数据节点的地址
    头指针: 头节点的地址
    首节点: 第一个存放数据的节点
    尾节点: 最后一个存放数据的节点, 其指针域应为NULL

  • 链表的实现
    由于涉及多种基本的数据, 所以在C中, 我们用结构体+指针实现链表

示例代码:

#include <stdio.h>// 节点结构体typedef struct node{    // 数据域    int age;    char sex;    // 指针域    struct node * next;}Node;void main(){    int i = 0;    // 头指针    struct node *head, *p;    // 为头节点申请空间    head = (Node*)malloc( sizeof(Node) );        // 新建10个节点    for(i=0, p = head; i<=9; i++)    {        // 为节点申请空间        (*p).next = (Node*)malloc( sizeof(Node) );         // 更新暂时节点地址到下一个节点        p = (*p).next;    }    // 尾节点指针域为NULL    (*p).next = NULL;    // 遍历节点    for(p=(*head).next; p!=NULL; p=(*p).next)    {        ....    }}

PS: 链表的操作有头/尾插节点, 遍历链表, 节点的数据交换
      上面介绍的只是简单的单链表, 还有双向链表, 循环链表

原创粉丝点击