- 博客(103)
- 收藏
- 关注
原创 双端循环队列的入列和出列
算法思想:哈哈哈,这道题,buff叠满了,循环+队列+操作受限(对头和队尾都能入队,只有队尾出队),具体知识讲解和图解在王道p79页。
2024-04-02 18:27:27
333
原创 回文数的判断
算法思想:代码是将字符串全部入栈,然后扫描字符串进行比较,直到扫描到字符串尾部,该算法需要两次扫描字符串,效率不高。可以改进代码,只将字符串的前半部分入栈,然后前半部分出栈与字符串后半部分比较,算法思想类似模式判断,再此不再赘述,此代码只需扫描字符串一次,效率高。
2024-04-02 18:23:29
190
原创 表达式括号匹配
算法思想:依次读入一串字符串,若是左括号,则直接Push压进栈;如果是字符则继续读取下一个字符;如果是右括号,则与栈顶元素的左括号比较是否匹配,即‘)’与‘(’,‘】’与‘【’,‘}’与‘{’匹配;如果出现不匹配则直接打印no并停止运行;如果匹配成功则将栈顶的左括号弹出;重复上述步骤,直到所有字符串都读取完毕之后,要检查栈是否为空,即栈内是否留有左括号,如果有则返回no,如果栈空则返回yes,即表达式符合。
2024-04-02 18:15:24
194
原创 素组主元素
依次扫描所给数组中的每一个整数,将第一个遇到的整数Num保存到c中,记录Num出现的次数为1,若遇到的下一个整数仍等于Num,则计算器加1,否则计数器减1,当计数器减到0时,将遇到的下一个整数保存到c中,计数重新记为1,开始新一轮计数,即从当前位置开始重复上述过程,直到扫描完全部元素。最后判断c中元素是否是真正的主元素:再次扫描该数组,统计c中元素出现的次数,若大于n/2,则为主元素,否则序列中不存在主元素。
2024-04-02 18:05:34
384
原创 以顺序表作为多项式存储结构的多项式加法操作
算法思想:遍历顺序表La和Lb中元素,如果指数相同则进行系数相加,La和Lb索引指针同时后移一个位置;如果Lb中指数元素小于La中指数,则插入到La当前元素前面,同时Lb索引指针后移一个位置;如果Lb中指数元素大于La中指数,则La的索引指针后移一个位置;如果La遍历完成,Lb中还有剩余元素,则将Lb中剩余元素全部插入到La尾部。此时顺序表La即为一元多项式相加的结果。
2024-04-02 17:58:16
323
原创 顺序表的二分查找
算法思想:有序表查找目标元素最快的方法是二分查找,如果找到目标元素,则返回目标元素索引下表,否则返回二分查找中较大索引下表high,该索引下表为目标元素x所需插入位置。
2024-04-02 17:42:02
205
原创 有序顺序表的插入
遍历顺序表,找到元素e要插入位置ith;将顺序表中ith位置及其之后元素依此后移一个单位;将元素e放到顺序表ith位置,同时顺序表长度加一。
2024-04-02 17:37:02
165
原创 删除单链表中重复出现的元素
算法思想:通过冒泡排序将无序单链表变成有序单链表,然后访问有序单链表中的每一对前驱和后继,若后继结点中的数据与前驱结点中的数据相同,则将后继结点删除;重复上述步骤,直到访问完链表中的每一对前驱和后继结点。
2024-03-30 23:09:44
498
原创 单链表的结点移动
算法思想:两次遍历链表。第一次遍历,找到数据域最大的结点和尾指针,为后面的删除和插入做准备;第二次遍历,找到最大值所在位置和他的前驱结点,将它从链表中断开删除,并尾插入到链表最后面。
2024-03-30 23:07:36
320
原创 输出单链表倒数第K个结点值
算法思想:先搜索距离第一个数据节点m个位置的结点,用指针pCur指向第m+1个结点,用pNode指向第1个结点。每次移动两个指针,当pCur指针指向空结点时,pNode指针指向倒数第m个结点,即为所求结点。
2024-03-30 23:05:04
245
原创 查找链表中的中间结点
用两个指针slow与fast一起遍历链表。slow一次走一步,fast一次走两步,那么当fast快指针为null或快指针的next为null时退出循环,slow必然位于中间。
2024-03-30 23:00:43
355
原创 在A中删除既在B表中出现又在C表中出现的元素
算法思想:保留La的头节点,并用pcur指针指向La链中的第一个结点,通过pcur指针遍历La中的每一个元素,并判断该元素是否在Lb和Lc链中出现,如果没有同时出现在Lb和Lc中,这尾插到La的头节点后面;重复上述步骤,直到遍历完La中的每一个元素。算法思想:每次在Lb和Lc链中找相同结点,然后在Lc中查找该相同结点;如果La中存在该相同结点,进行删除;重复上述步骤,直到三条链中任意一条链被搜索完,此时La中与其余两链的相同结点都被删除。
2024-03-30 22:33:20
532
原创 删除单链表中所有值大于min且小于max的元素
算法思想,找到第一个大于min的结点,然后从这个结点开始访问链表中的元素,如果当前访问的元素值小于max,则将其删除,反之,则链中不存在小于max的元素,停止搜索;重复上述步骤,直到链表中元素都被访问完。
2024-03-30 22:25:55
348
原创 选择排序——堆排序
(1)堆调整的过程:如果子树的根小(大)于左右孩子的较大者,那么将较大(小)者与根进行交换,交换后较大(小)者位置为根的子树是否构成子树堆;否则,重复上述步骤,继续对不满足堆的子树进行调整。(3)堆排序:大(小)根堆堆顶元素为最大(小)值,输出堆顶元素,将堆底元素送人堆顶,然后将剩余元素整理成堆;重复上述步骤,直到将全部元素有序输出。(2)建立大(小)根堆:从右到左,从下到上来访问每棵子树的根,然后将子树传入调整函数,将其调整为子树堆。需要升序排列元素,建立大根堆;需要降序排序元素,建立小根堆。
2023-05-18 02:08:32
434
原创 选择排序——简单选择排序
选择排序算法思想:每一趟(如第i趟)从后面n-i+1个待排序元素选择关键字最小(大)的元素,作为有序子序列的第i个元素,直到第n-1趟做完,待排序元素只剩下一个元素,就不用再选了。
2023-05-18 02:04:47
309
原创 交换排序(冒泡排序,快速排序)
快速排序算法思想:在待排序表中任意选取一个pivot元素作为枢纽,通过一趟排序将待排序表划分成两部分,使得表左边元素都小于pivot,表右边元素都大于pivot,则pivot放在了最终的位置,这个过程称为一趟快速排序。然后分别递归的对两个子表重复上述过程,直到每部分内只有一个元素或者为空为止,即所有元素放到了最终的位置。冒泡排序算法思想:从前往后两两比较相邻元素值,若为逆序,则交换他们,直到序列比较完。
2023-05-15 03:06:08
128
原创 插入排序(直接插入排序,折半插入排序,希尔排序)
折半插入排序算法思想:从第二个元素开始,依次将后面元素插入前面已经排序好的序列(与直接插入排序不同的是寻找插入位置使用的是折半查找,先找到待插入位置,再统一后移元素,最后将待插入元素放到合适位置)。希尔排序算法思想:先将待排序元素按照增量分成若干子表,对各个子表分别进行直接插入排序,当整个表中元素基本有序之后,再对全体元素进行一次直接插入排序。直接插入排序算法思想:从第二个元素开始,依次将后面元素插入前面已经排序好的序列。
2023-05-14 02:43:16
117
原创 设计算法逆置顺序表L
算法思想:low指针从表头向表尾移动,high指针从表尾向表头移动,同时交换每一对low元素和high元素,直到low与high指针重合,则顺序表逆置完成。
2023-05-13 00:22:57
166
原创 给定两个升序表A和B,求解A-B
算法思想:指针IndexA和IndexB分别指向表A和表B的第一个元素,如果IndexA所指元素小于IndexB所指元素,则将IndexA元素加入差集表中,并移动IndexA的指针指向下一个元素;如果IndexA所指元素大于IndexB所指元素,则移动IndexB的指针指向下一个元素;如果两指针指向元素相等,则两指针同时移动指向下一个元素。重复上述步骤,直到A与B其中一条链遍历完成,如果A链中还有剩余元素未遍历,则将其全部加入差集表中。
2023-05-13 00:12:48
137
原创 给定两个升序表A和B,求解A∩B(共同元素只能在交集中出现一次)
算法思想:指针IndexA和IndexB分别指向表A和表B的第一个元素,如果IndexA所指元素小于IndexB所指元素,则移动IndexA的指针指向下一个元素;如果IndexA所指元素大于IndexB所指元素,则移动IndexB的指针指向下一个元素;如果两指针指向元素相等,将共同元素保存后,两指针同时移动指向下一个元素,如果该元素与交集表尾元素不相等,则将其插入交集表中。重复上述步骤,直到A与B其中一条链遍历完成。
2023-05-12 23:49:30
147
原创 表A前r个元素递增有序,后n - r个元素递减有序,设计算法将表A升序排列
算法思想:将表A的第r+1到n-1个元素依次插入前r个元素中,最终使得整个表有序。
2023-05-12 23:00:26
217
原创 合并升序表A和降序表B到表A,并保持A为升序存储
算法思想:依次取La,Lb中较大的元素插入La中,直到一条链元素全部元素全部插入La中,如果Lb中元素有剩余,则将其依次插入La中,最后释放Lb存储空间。
2023-05-12 22:15:55
138
原创 合并升序表A和降序表B到表C,并使得C为升序存储
算法思想:依次取La,Lb中较小的元素插入Lc中,直到一条链元素全部元素全部插入Lc中,将另外一条链中元素依次插入Lc中,最后释放La,Lb存储空间。
2023-05-12 21:34:50
100
原创 非递减顺序表删除重复数据元素
算法思想:重前往后遍历顺序表,如果当前元素与新链的链尾元素不相同,则将其插入新链尾部,同时更新新链长度。因为新链元素个数总是小于等于旧链,故可以不另外开辟空间使用旧链创建新链。
2023-05-12 01:48:40
538
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人