- 博客(71)
- 收藏
- 关注
原创 数据结构每日一题day18(链表)★★★★★
题目描述:试编写在带头结点的单链表L中删除一个最小值结点的高效算法(假设最小值结点唯一)。时间复杂度:O(n )空间复杂度:O(1)
2025-05-09 17:44:36
587
原创 数据结构每日一题day17(链表)★★★★★
题目描述:假设有两个按元素值递增次排列的线性表,均以单链表形式存储。请编与算法将这两个单链表归并为一个按元素值依次递减排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。时间复杂度:O(n + m),其中 n 和 m 分别是两个链表的长度。比较 p 和 q 的当前节点值,选择较大者插入结果链表的头部。空间复杂度:O(1),仅使用常数个额外指针变量,复用原节点。使用头插法将节点插入结果链表(确保递减顺序)。将未遍历完的链表剩余节点依次头插到结果链表中。创建一个新的头结点(用于结果链表)。
2025-05-09 17:32:10
444
原创 数据结构每日一题day16(链表)★★★★★
题目描述:编写算法将一个带头结点的单链表 A={a1,b1,a2,b2.…an,bn}分解为两个带头结点的单链表 A和 B,使得A={a1,a2,……,an},B={bn,……如果 count 为奇数(aᵢ),将当前节点保留在 A 中,并更新 tailA。如果 count 为偶数(bᵢ),将当前节点头插法插入 B(实现逆序)。定义指针 p 遍历原链表 A,tailA 指向 A 的当前尾节点。遍历结束后,确保 A 的尾节点的 next 为 NULL。时间复杂度:O(n)空间复杂度:O(1)
2025-05-02 00:38:57
447
原创 数据结构每日一题day15(链表)★★★★★
题目描述:将一个带头结点的单链表A分解为两个带头结点的单链表A和 B,使得A表中含有原表中序号为奇数的元素,而B表中含有原表中序号为偶数的元素,且保持相对顺不变,最后返回 B 表。定义指针 p 遍历原链表 A,tailA 指向 A 的当前尾节点,tailB 指向 B 的当前尾节点。如果 count 为奇数,将当前节点保留在 A 中,并更新 tailA。如果 count 为偶数,将当前节点移动到 B 中,并更新 tailB。遍历结束后,确保 A 和 B 的尾节点的 next 均为 NULL。
2025-05-02 00:32:59
302
原创 数据结构每日一题day14(链表)★★★★★
prev 初始化为 NULL,curr 初始化为头结点的下一个节点(即第一个有效节点)。题目描述:试编写算法将带头结点的单链表就地逆置,所谓“就地”就是空间复杂度为O(1)。定义三个指针 prev、curr、next,分别表示前驱节点、当前节点和后继节点。遍历链表,每次将 curr->next 指向 prev,实现局部反转。遍历结束后,prev 指向原链表的最后一个节点,即新链表的第一个节点。将头结点的 next 指向 prev,完成整个链表的逆置。时间复杂度:O(n)空间复杂度:O(1)
2025-04-30 23:04:49
352
原创 数据结构每日一题day13(链表)★★★★★
1.初始化链表:创建一个头结点(不存储实际数据),头指针 L 指向该头结点。初始时,头结点的 next 指针为 NULL,尾指针 tail 也指向头结点。题目描述:采用尾插法在头指针L处建立一个带头结点的单链表,输入-1表示结束结果返回建立的单链表。3.结束处理:输入 -1 后,将尾节点的 next 指针置为 NULL,表示链表结束。对于每个非 -1 的数据,创建一个新节点,并将数据存入新节点的数据域。2.循环输入数据:从用户输入中读取数据,直到输入 -1 为止。时间复杂度:O(n)空间复杂度:O(n)
2025-04-29 22:03:02
603
原创 数据结构每日一题day12(链表)★★★★★
题目描述:采用头插法在头指针L处建立一个带头结点的单链表,输入-1表示结束结果返回建立的单链表。1.初始化头结点:创建头结点,并使其指针域初始化为NULL。不断接收用户输入的整数值,若输入为-1则停止。为新元素动态分配结点空间,将数据存入结点。使用头插法将新结点插入头结点之后。返回链表:最终返回头指针L。时间复杂度:O(n)空间复杂度:O(n)
2025-04-28 15:51:15
337
原创 数据结构每日一题day11(链表)★★★★★
题目描述:有一个带头结点的单链表L,请设计一个算法查找其第1个数据值为e的结点,若存在则返回指向该结点的指针,若不存在则返回 NULL。返回结果:若找到匹配的结点,立即返回指向该结点的指针;若遍历结束未找到,返回NULL。遍历链表:从头结点后的第一个结点开始依次向后遍历,比较每个结点的数据域是否等于e。输入检查:若链表为空(仅有头结点),直接返回NULL。时间复杂度:O(n)空间复杂度:O(1)
2025-04-03 21:46:30
809
原创 数据结构每日一题day10(链表)★★★★★
题目描述:有一个带头结点的单链表L,请设计一个算法查找其第i个结点位置,若存在则返回指向该给点的指针,若不存在则返回NULL。遍历链表:从头结点后的第一个结点开始,依次向后遍历,直到找到第i个结点或链表结束。返回结果:若找到第i个结点,返回指向该结点的指针;输入检查:若链表为空(仅有头结点)或i ≤ 0,直接返回NULL。时间复杂度:O(n)空间复杂度:O(1)
2025-04-02 11:27:47
444
原创 数据结构每日一题day9(顺序表)★★★★★
题目描述:将两个有序顺序表A和B合并为一个新的有序顺表返回 true,合并失败则返回 false。双指针遍历:使用两个指针分别遍历A和B,比较当前元素大小,将较小者插入C,直至其中一个表遍历完毕。输入检查:若A、B或C为空指针,或合并后总长度超过顺序表最大容量,返回false。时间复杂度:O(m+n),其中m、n为A、B的长度,需遍历所有元素。更新表长:设置C的length为合并后总长度,返回true。剩余元素处理:将未遍历完的表中剩余元素全部追加到C中。空间复杂度:O(1),仅需常数级辅助变量。
2025-04-01 20:03:02
252
原创 数据结构每日一题day8(顺序表)★★★★★
遍历顺序表(从i=1开始),若当前元素data[i]不等于data[k],则将其保留到k+1位置,并更新k。题目描述:从有序顺序表中删除所有其值重复的元素,使其中所有元素的值均不同。更新表长:遍历结束后,表长设为k+1,直接截断后续元素。输入检查:若顺序表为空或指针为空,返回false。复杂度分析:时间复杂度O(n)空间复杂度O(1)使用指针k标记保留元素的末尾,初始位置为0。
2025-04-01 19:51:21
380
原创 数据结构每日一题day7(顺序表)★★★★★
题目描述:从顺序表中删除其值在给定值s与t之间(包含s和 t,要求 s<t)的所有元素,若s或t不合理或顺序表为空,则返回 false,若执行成功则返回 true。双指针覆盖法:用 k 记录保留元素的索引,i 遍历原数组。若元素不在 [s, t] 内,将其保留到 k 位置,k 递增。输入检查:若顺序表为空、指针为空或 s >= t,直接返回 false。更新表长:遍历结束后,表长设为 k,实现原地删除。复杂度分析:时间复杂度O(n)空间复杂度O(1)
2025-03-30 17:49:18
644
原创 数据结构每日一题day6(顺序表)★★★★★
双指针覆盖法:使用两个指针(逻辑上的索引),一个遍历原数组(i),另一个记录保留元素的位置(k)。筛选保留元素:遍历时,若当前元素不等于x,将其复制到k位置,并递增k。题目描述:对长度为n的顺序表L,删除顺序表中所有值为x的数据元素。更新表长:遍历结束后,将顺序表长度设为k,实现原地删除所有x元素。复杂度分析:时间复杂度O(n)空间复杂度O(1)
2025-03-29 17:51:36
353
原创 数据结构每日一题day5(顺序表)★★★★★
题目描述:从顺序表L中删除最小值元素并由函数返回被删元素的值。(假设顺序表L有最小值且最小值唯一)合法性检查:若顺序表为空或指针为空,返回特定错误值(如-1,根据题目假设可省略)。保存并删除元素:将最小值元素保存后,将其后所有元素前移一位覆盖该位置。查找最小值位置:遍历顺序表,记录当前最小值及其下标。复杂度分析:时间复杂度O(n)空间复杂度O(1)更新表长:顺序表长度减1,返回被删元素值。
2025-03-28 18:18:09
321
原创 数据结构每日一题day4(顺序表)★★★★★
题目描述:删除顺序表L中第i个位置的元素,若i的输入不合法,则返回 false;否则将被删元素赋给引用变量e,并将第i+1个元素及其后的所有元素依次往前移动一个位置,返回 true。合法性检查:若顺序表为空、指针为空或位置i不在有效范围(1 ≤ i ≤ length)内,返回false。元素前移:将第i+1到表尾的所有元素依次前移一位,覆盖被删元素的位置。保存被删元素:将第i个元素(对应数组下标i-1)的值赋给引用变量e。复杂度分析:时间复杂度O(n)空间复杂度O(1)
2025-03-27 10:23:28
522
原创 数据结构每日一题day3(顺序表)★★★★★
题目描述:顺序表L的元素递增有序排列,设计一个算法在插入元素x后保持该顺序表仍然递增有序排列,插入成功后返回插入元素所在位置,不成功返回-1。查找插入位置:遍历顺序表,找到第一个大于等于 x 的元素的位置 i;若所有元素均小于 x,则插入到表尾(i = length)。合法性检查:若顺序表已满(length == MAXSIZE)或指针为空,插入失败,返回 -1。元素后移:从表尾开始,将位置 i 及之后的元素全部后移一位,腾出插入位置。插入元素:将 x 存入位置 i,表长加 1,返回插入位置 i。
2025-03-26 11:25:05
1215
原创 数据结构每日一题day2(顺序表)★★★★★
合法性检查:若插入位置 i 不满足 1 ≤ i ≤ length+1 或顺序表已满,则插入失败。元素后移:从最后一个元素开始,将第 i 到第 length 个元素依次后移一位,腾出位置 i。题目描述:在顺序表L的第i个位置插入新元素e,成功返回true,不成功返回false。插入元素:将 e 放入位置 i-1(数组下标从 0 开始)。复杂度分析:时间复杂度O(n)空间复杂度O(1)更新长度:顺序表长度加 1。
2025-03-25 08:15:13
236
原创 数据结构每日一题day1
初始化指针:用两个下标分别指向顺序表的首元素(下标0)和末元素(下标length-1)。题目描述:设计一个高效算法,讲顺序表L的所有元素逆置。要求算法空间复杂度为O(1)算法思想:采用双指针法。交换元素:每次交换两个下标对应的元素,然后首指针右移,尾指针左移。终止条件:当首指针超过或等于尾指针时停止,确保所有元素被交换一次。复杂度分析:时间复杂度O(n)空间复杂度O(1)
2025-03-24 17:03:57
364
原创 关于string的函数
在使用这个函数的时候一定要注意的问题:他不是一个判断类型的函数,所以返回的不是一个bool类型,他如果找到了的话会直接返回位置,这是一个int类型,这个位置可能是0。所以在判断是否查找到时要注意使用静态成员变量std::string::npos。注意find和insert函数参数位置相反。
2025-03-04 16:57:44
187
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人