数据结构(二)——链表(C语言实现)

定义

相对于顺序表而言,“勤拿少取”这是对链表最形象的描述。意指,它需要一个结点,就在内存中分配一块内存单元。比顺序表不足的是,链表的每个结点中,需要一个存储单元保存指向下一个结点的地址。

链表的访问需要从第一个结点(或称头结点)开始寻找,(顺序表可以根据下标直接访问)。链表的插入和删除只需对指定位置的结点操作即可。

常见的链表,根据指向下个链表的指针可分为单向链表双向链表。根据第一个结点是否存储元素可分为带头结点的链表不带头结点的链表。再根据末尾结点next指针的指向可分为循环链表非循环链表

*下面程序以单向带头结点的非循环链表为例

实现

定义结构

typedef int LinkType; //存储单元类型

typedef struct linkNode {
    LinkType key; //结点的key值
    struct linkNode *next; //指向下一个结点
} LNode, *LinkList;//LNode 是普通类型,LinkList是指针类型

定义LinkType类型,使该链表结构适合更多数据类型。每个链表的结点,包含一个值域key和一个指针域next。这里声明两种类型LNodeLinkList。以下两行代码是等价的。

LNode* node = (LNode*)malloc(sizeof(LNode));
LinkList node = (LinkList)malloc(sizeof(LNode));

定义操作

创建头结点

/**
 * 创建头结点
 */
LinkList createHead_link() {
    LinkList head = (LinkList) malloc(sizeof(LNode));
    head->next = NULL;
    return head;
}

这里是动态分配一个内存单元存储头结点,也可以参照顺序表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值