![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础数据结构和算法
文章平均质量分 59
_200_
这个作者很懒,什么都没留下…
展开
-
排序的基本概念和分类
什么是排序排序是我们生活中经常会面对的问题。同学们做操时会按照从矮到高排列;老师查看上课出勤情况时,会按学生学号顺序点名;高考录取时,会按成绩总分降序依次录取等。那排序的严格定义是什么呢?排序:将一组杂乱无章的数据按定规律顺次排列起来。即,将无序序列排成一个有序序列(由小到大或由大到小)的运算。如果参加排序的数据结点包含多个数据域,那么排序往往是针对其中某个域而言。排序方法的分类按数据存储介质按数据存储介质,可分为内部排序和外部排序(文件排序)。内部排序:需要排序的数据量不大,数据在内存,无原创 2022-02-15 11:45:48 · 1004 阅读 · 0 评论 -
链表中环的入口结点
链表中环的入口结点题目:如果一个链表中包含环,如何找出环的入口点?例如:下图所示的链表,环的入口结点是结点3解决这个问题的第一步是如何确定一个链表中包含环。一个包含环的链表,一直向前遍历是无穷次的。那么我们可以用两个快慢指针来解决这个问题。定义两个指针,一个一次走一步,另一个一次走两步。如果快指针追上了慢指针,那么表示链表有环。如果快指针到达链表尾部(next域为空),说明链表无环。确定链表有环之后,我们接下来就是找环的入口了。我们可以用两个指针来解决这个问题。先定义两个指针p1和p2指向原创 2022-01-07 15:42:25 · 303 阅读 · 0 评论 -
单链表中倒数第K个结点
单链表中倒数第K个结点链表结点定义如下:typedef int ElemType;typedef struct Node { ElemType data; struct Node *next;}HeadList;为了得到倒数第k个结点,很自然的想法是先走到链表的尾部,再从尾部回溯k步。而题中所给的链表结点定义可以看出是单向链表,没有从后往前的指针,因此这种思路是行不通的。既然不能从尾部回溯,我们可以把思路回到头结点上。假设整个链表有n个结点,那么倒数第k个结点就是从头结点开始的第n原创 2022-01-07 13:55:27 · 1222 阅读 · 1 评论 -
O(1)时间下删除链表的结点
O(1)时间下删除链表的结点在给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间内删除该结点。链表的结点结构如下:typedef int ElemType; typedef struct Node { ElemType data; struct Node *next; }PointList;在单链表中删除一个结点,常规的做法无疑是从链表的头节点开始,顺序遍历查找要删除的结点,并在链表中删除该结点。如上图所示的链表中,我们想删除结点i,可以从链表的头结点开始顺序遍历,发现h的原创 2022-01-06 22:27:06 · 147 阅读 · 0 评论 -
静态链表的C语言代码实现
静态链表的C语言代码实现static_link_list.hstatic_link_list.ctest_main.c以下代码仅测试插入操作,删除操作请自行测试static_link_list.h#define MAXSIZE 1000typedef int ElemType;typedef struct { ElemType data; int cur;}Component, StaticLinkList[MAXSIZE];bool InitList(StaticLinkList原创 2022-01-06 19:37:28 · 315 阅读 · 0 评论 -
单链表结构与顺序存储结构优缺点
单链表结构与顺序存储结构优缺点简单地对单链表结构和顺序存储结构做对比:单链表顺序表存储分配方式采用链式存储结构,用一组任意地存储单元存放线性表地元素用一段连续地存储单元以此存储线性表地数据元素时间性能查找的时间复杂度O(n),插入和删除时间为O(1)查找的时间复杂度O(1),插入删除平均需要移动表长一半的元素,时间为O(n)空间性能不需要预先分配存储空间,元素个数不受限制需要预先分配存储空间,分大了浪费,分小了易发生上溢通过上面的对比可以发现:若线性原创 2022-01-06 16:27:34 · 2251 阅读 · 0 评论 -
静态链表(用数组描述的链表)
静态链表在C语言中,因为它具有指针的能力,使得它可以非常容易地操作内存中的地址和数据,这比其他高级语言更加灵活方便。后来的面向对象语言,如Java、C#等,虽然不使用指针,但因为启用了对象引用机制,从某些角度也间接实现了指针的某些作用。但对一些语言,如Basic、Fortran等早期的编程高级语言,由于没有指针,链表结构中的指针域也就没办法实现了。怎么办呢?为了解决指针域无法表示的问题,有人就想出用数组来代替指针,来描述单链表。首先我们让数组的元素都是由两个数据域组成,data和cur。也就是说,原创 2022-01-06 16:02:17 · 724 阅读 · 0 评论 -
单链表的数据结构和基本操作
单链表的基本操作头结点单链表的基本操作头结点单链表的数据结构头结点的初始化插入新结点头插法插入新结点尾插法插入新结点按位置插入新结点删除节点头删尾删按位置删头指针单链表的基本操作实现代码链表是一种线性结构,在存储数据时,在逻辑上是连续的,但是在物理空间上并不连续。一个链表的结点由两个部分组成,分别是数据域和指针域。而单链表就是它的每一个结点,除了记录元素的数据外,只记录其直接后继结点的地址。单链表由两种实现方法:头结点实现头指针实现头结点单链表的基本操作头结点单链表的数据结构type原创 2022-01-05 23:06:04 · 557 阅读 · 0 评论 -
头节点双向循环链表的C语言代码实现
头节点双向循环链表的实现ring_link.hring_link.ctest_main.c测试代码仅测试插入,删除请自行测试ring_link.htypedef int ElemType; typedef struct Node { ElemType data; struct Node* prev; struct Node* next; }RingLink;void RingLinkInit(RingLink* head); bool RingLinkInsert(RingLi原创 2022-01-05 16:17:29 · 53 阅读 · 0 评论 -
头节点双向链表的C语言代码实现
头节点双向链表的实现double_link.hdouble_link.ctest_main.c测试代码仅测试插入,删除请自行测试double_link.htypedef int ElemType; typedef struct Node { ElemType data; struct Node* prev; struct Node* next; }SDoubleLink;void DoubleLinkInit(SDoubleLink* head); bool DoubleLi原创 2022-01-05 15:17:48 · 230 阅读 · 0 评论 -
头指针单链表的C语言代码实现
头指针单链表的实现point_list.hpoint_list.ctest_main.cpoint_list.h测试代码仅测试插入,删除请自行测试typedef int ElemType; typedef struct Node { ElemType data; struct Node *next; }PointList;void InitPointList(PointList** pp); // 初始化 bool InsertPointList(PointList **pp, El原创 2022-01-05 14:32:26 · 510 阅读 · 0 评论 -
带头结点单链表的C语言代码实现
带头结点单链表的实现head_list.hhead_list.ctest_main.c测试代码仅测试插入,删除请自行测试head_list.htypedef int ElemType;typedef struct Node { ElemType data; struct Node *next;}HeadList;void InitHeadList(HeadList* head);int GetLength(HeadList* head);void ShowList(HeadLis原创 2022-01-05 00:15:00 · 374 阅读 · 0 评论