当前位置: 首页 > news >正文

线性表之链式存储基本操作(c语言实现,附解析)

今天,我来讲一下数据结构链表的基本操作,首先我们要知道链表的基本操作有创建,查找,插入,删除。接下来我们逐一实现操作。

结构体定义

typedef struct Node* List;
struct Node{
ElementType Data;
List next;
};

文章目录

  • 创建
  • 查找
  • 插入
  • 删除

创建

List creat() {
List L;
L = (List)malloc(sizeof(struct Node));
L->next = NULL;
return L;
}

创建相对比较简单,先申请内存,之后让next为NULL,返回我们创建的头节点就行了。

查找

int Find(List head, int X) {
List L = head;
int i = 0;
while (L->next != NULL&&i<X) {L = L->next;i++;
}
if (i == X) {return i;
}
else {return NULL;
}
}

这里我们有两个参数,一个是指向头节点的指针,一个是我们要插入的位置序号,在这里我们先要让i=0,因为这个链表是有头指针的,第一个不能算进节点中,之后我们进行循环,并且让i++,循环结束的条件要么是找到了,也就是i=x,要么是没有找到,找到了我们就返回i的值,没有找到我们就返回NULL表明我们没有找到。

插入

bool Insert(List head, ElementType X, int p) {
int i = 1;
int k;
List L = head;
k = Find(head, p);
if (k == NULL) {printf("插入的位置有错");return false;
}
else {List tail = (List)malloc(sizeof(struct Node));tail->Data = X;for (; L->next != NULL&&i < p ; i++) {L = L->next;}tail->next = L->next;L->next = tail;return true;
}
}

这里我们输入三个参数,一个是头节点,一个是我们要插入的值,一个是我们要插入的位置。
在这里我们仍然用i来计数,为什么这里我们用i=1而不是i=0呢,因为比如我们要插入到第二个节点,那么我们只需要找到第一个节点的位置,而不需要第二个节点的地址,之后我们检查插入的合法性,如果不合法那么我们直接返回,否则就继续,在这里我们先申请一个节点的空间,之后进入循环,当循环结束的时候,我们肯定找到了要插入位置的前一个位置,这时我们就可以进行节点的插入了,之后返回true。

删除

bool Delete(List head, int p) {
int k,i=1;
List L = head;
List tail;
k = Find(head, p);
if (k == NULL) {printf("删除的位置错误");return false;
}
else {for (; L->next != NULL&&i<p; i++) {L = L->next;}tail = L->next;L->next = L->next->next;free(tail);return true;
}
}

在这里我们输入两个参数,一个是头节点,一个是要删除的位置。
在这里我们依然让i=1,原因是链表是单向的,我们只需要找到要删除位置的前一个位置就行了,还是先检查删除的合法性,如果不合法那么我们就直接返回,如果合法那么我们就进行下一步操作,当循环终止的时候说明我们找到了删除位置的前一个位置,这时我们就可以进行删除操作了,
至此,讲解完毕。
(新人写作,难免有错误或不够精简的地方,请谅解,也请各位指点)

http://www.lryc.cn/news/471669.html

相关文章:

  • 27.Redis哨兵架构
  • BGP路由优选
  • cjson内存泄漏问题注意事项
  • 雷军救WPS“三次”,WPS注入新生力量,不再“抄袭”微软
  • zookeeper全系列学习之分布式锁实现
  • 耐用的内衣洗衣机有哪些?双11好用内衣洗衣机品牌排行榜
  • 富格林:曝光可信经验击败陷阱
  • 3211、生成不含相邻零的二进制字符串-cangjie
  • 【wpf】wpf程序联合控制台测试
  • 使用 Spring Doc 为 Spring REST API 生成 OpenAPI 3.0 文档
  • ssm基于ssm框架的滁艺咖啡在线销售系统+vue
  • 微信小程序 - 动画(Animation)执行过程 / 实现过程 / 实现方式
  • 【Linux】nohup 命令
  • CSS、Less、Scss
  • [笔记] ffmpeg docker编译环境搭建
  • 基于SSM的心理咨询管理管理系统(含源码+sql+视频导入教程+文档+PPT)
  • 南开大学《2023年+2022年810自动控制原理真题》 (完整版)
  • 【算法】Kruskal最小生成树算法
  • Pocket通常指的是一种特定的凹形或凹槽
  • Cesium基础-(Entity)-(Billboard)
  • 从0到1,解读安卓ASO优化!
  • go语言中流程控制语句
  • k8s 部署 emqx
  • CSS.导入方式
  • Linux之nfs服务器和dns服务器
  • 大模型系列——AlphaZero/强化学习/MCTS
  • 原生js实现拖拽上传(拖拽时高亮上传区域)
  • python道格拉斯算法的实现
  • STM32的hal库中,后缀带ex和不带的有什么区别
  • 可观测性三大支柱