c语言链表的操作,C语言实现单链表的基本操作

本文介绍了链表的概念,特别是单链表的特性,包括逻辑相邻元素在物理上的不相邻以及高效的插入和删除操作。通过C语言代码展示了如何在单链表中插入和删除数据。单链表的插入和删除时间复杂度为O(1),而随机访问则为O(n)。此外,对比了单链表与顺序表在存储和操作效率上的区别。
摘要由CSDN通过智能技术生成

链表是一种链式存储结构,其特点是用一组任意的存储单元存储数据元素。链表最重要的概念是结点,一个结点表示链表中的一个数据元素,结点由储存数据元素的信息和存放指向下一个节点的的指针(单、双链表的最后一个节点除外,它们存储的是一个空指针NULL)两部分构成 。下面用C语言为大家讲解单链表的插入数据和删除数据操作。

1. 单链表的特点

(1)逻辑上相邻的元素在物理上不一定相邻。

(2)删除和插入操效率高,随机访问效率低。

d019752366b860d17f2b90c8c712e1ae.png

2.单链表定义

typedef struct ListNode

{

type data; //数据域,type为数据的具体类型

struct ListNode *next; //指向下一个节点的指针

}ListNode, *LinkList;

3. 单链表基本操作

(1)插入数据

//将新元素插入到i位置

int ListInsert(ListNode list, int i, type newData)

{

LinkList p = list;

int j = 0;

while (NULL != p && j < i - 1)

{

p = p->next;

j++;

}

//找到插入位置

if (NULL != p && j == i - 1)

{

LinkList newNode = (LinkList)mallock(sizeof(ListNode));

newNode->data = newData;

newNode->next = p->next;

p->next = newNode;

return 0;

}

else

{ return -1; }

}

(2)删除数据

//删除第i个元素

void ListDelete(LinkList list, int i)

{

LinkList p = list;

int j = 0;

while (NULL != p && j < i - 1)

{

p = p->next;

j++;

}

if (NULL != p && j == i - 1 && p->next != NULL)

{

LinkList pdel = p->next;

p->next = pdel->next;

free(pdel);

return 0;

}

else

{ return -1; }

}

e0c7e83a0ea3548918b0d57262edcb3a.png

4.顺序表和单链表比较

(1)顺序表逻辑相邻的元素物理上也相邻,单链表逻辑相邻的元素物理上不一定相邻(用指针连接)

(2)顺序表随机访问元素时间复杂度为O(1),单链表的为O(n)

(3)顺序表插入/删除元素的时间复杂度为O(n),,单链表插入/删除的时间复杂度为O(1)

该文图片均来自网络!今天我们就讲到这里,如果有问题欢迎大家评论哦!

举报/反馈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值