文章 2022-11-19 来自:开发者社区

【数据结构】带头双向循环链表的增删查改(C语言实现)(2)

11、在pos位置之前删除数据和pos位置之前插入数据类似,这里我们的时间复杂度也为O(1),并且我们也可以通过调用此函数来完成头删和尾删的功能。但是这里有一个问题,那就是pos不能是第一个节点的地址,因为我们不可能把哨兵位头结点给删除了,但是如果要避免这种情况出现,我们 Erase 函数就需要接受头结点的地址;但是其实这个问题不应该由函数的实现者来注意,而是应该有函数的调用者来避免,另外感觉为....

【数据结构】带头双向循环链表的增删查改(C语言实现)(2)
文章 2022-11-19 来自:开发者社区

【数据结构】带头双向循环链表的增删查改(C语言实现)(1)

前言在上一节中我们学习了单链表,但是我们发现单链表有如下缺陷:1、在尾部插入、删除数据时间复杂度为O(N),效率低;2、在pos位置前插入、删除数据时间复杂度为O(N),效率低;3、进行插入、删除数据时因为有可能改变头节点,所以需要传递二级指针,不易理解;基于单链表的这些缺陷,我们设计出了带头双向循环链表,带头循环实现链表能够完美的解决顺序表所存在的缺陷。一、什么是带头双向循环链表在单链表部分我....

【数据结构】带头双向循环链表的增删查改(C语言实现)(1)
文章 2022-11-19 来自:开发者社区

【数据结构】单链表的增删查改(C语言实现)(2)

8、在头部删除数据特别注意: 和插入数据一样,因为我们删除的可能是链表中的最后一个数据,即可能会改变 plist 的指向 (让 plist 重新指向 NULL),所以不管我们在什么地方删除数据,都需要传递二级指针。其次,由于我们这里是删除数据,所以函数调用者需要保证调用此函数时链表中至少是含有一个数据的;所以我们对 *pphead (等价于 plist) 进行断言,当调用者错误使用此函数时,我们....

文章 2022-11-19 来自:开发者社区

【数据结构】单链表的增删查改(C语言实现)(1)

前言在上一节中我们提到了顺序表有如下缺陷:在头部/中间的插入与删除需要挪动数据,时间复杂度为O(N),效率低;增容需要申请新空间,可能会拷贝数据,释放旧空间,会有不小的消耗;增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到 200,如果我们再继续插入了5个数据,后面没有数据插入了,那么会浪费95个数据空间;基于顺序表的这些不足,我们设计出了链表。一、链表1、链....

【数据结构】单链表的增删查改(C语言实现)(1)
文章 2022-11-19 来自:开发者社区

【数据结构】顺序表的增删查改 (C语言实现)(2)

四、完整代码1、SeqLIst.h#pragma once //防止头文件重复包含 //头文件的包含 #include <stdio.h> #include <stdlib.h> #include <assert.h> //符号与结构的定义 #define DEF_SIZE 5 //初始容量 #define CRE_SIZE 2 //...

【数据结构】顺序表的增删查改 (C语言实现)(2)
文章 2022-11-19 来自:开发者社区

【数据结构】顺序表的增删查改 (C语言实现)(1)

一、线性表是什么线性表线性表(linear list)是n个具有相同特性的数据元素的有限序列; 线性表是一种在实际中广泛使 用的数据结构,常见的线性表有:顺序表、链表、栈、队列、字符串…线性表的结构线性表在逻辑上是线性结构,也就说是连续的一条直线;但是在物理结构上并不一定是连续的, 线性表在物理上存储时,通常以数组和链式结构的形式存储。二、顺序表1、什么是顺序表顺序表是用一段物理地址连续的存储单....

【数据结构】顺序表的增删查改 (C语言实现)(1)

本页面内关键词为智能算法引擎基于机器学习所生成,如有任何问题,可在页面下方点击"联系我们"与我们沟通。

开发与运维

集结各类场景实战经验,助你开发运维畅行无忧

+关注