考研编程-线性表
考研中经常考到的线性表编程
Jiawen9
从来不自诩有不带偏见看待事物的所谓眼界和宽容,但会一直坚守接触之后能重新认识人和事物的勇气。
展开
-
【数据结构·考研】判断括号是否有效
判断括号是否有效原创 2023-06-02 00:01:32 · 158 阅读 · 0 评论 -
【数据结构·考研】判断一个链表是否有环
判断一个链表是否有环原创 2023-06-02 00:03:26 · 183 阅读 · 0 评论 -
【数据结构·考研】实现链式栈
实现链式栈原创 2023-06-02 00:01:08 · 142 阅读 · 0 评论 -
【数据结构·考研】实现顺序栈
实现顺序栈原创 2023-06-01 17:39:58 · 205 阅读 · 0 评论 -
【数据结构·考研】合并有序顺序表
合并有序顺序表原创 2023-06-01 17:32:59 · 297 阅读 · 0 评论 -
【数据结构·考研】合并升序链表
合并升序链表原创 2023-06-01 17:29:13 · 249 阅读 · 0 评论 -
【数据结构·考研】链表的相交结点
链表的相交结点原创 2023-06-01 17:23:57 · 163 阅读 · 0 评论 -
【数据结构·考研】反转链表
反转链表原创 2023-06-01 17:16:23 · 193 阅读 · 0 评论 -
【数据结构·考研】寻找链表的中间节点
寻找链表的中间节点原创 2023-06-01 17:07:02 · 170 阅读 · 0 评论 -
【数据结构·考研】在排序数组中寻找目标值
在排序数组中寻找目标值原创 2023-06-01 16:46:01 · 290 阅读 · 0 评论 -
【数据结构·考研】移除数组中值等于val的元素
移除数组中值等于val的元素原创 2023-06-01 16:39:59 · 281 阅读 · 0 评论 -
【数据结构·考研】删除数组中重复出现的元素
删除数组中重复出现的元素原创 2023-06-01 16:32:32 · 816 阅读 · 0 评论 -
【数据结构·考研】链表的头插法和尾插法
头插法和尾插法创建带头结点的链表原创 2023-06-01 16:09:17 · 467 阅读 · 0 评论 -
【数据结构·考研】KMP算法
子串的定位操作通常称为串的模式匹配,它求的是子串(常称模式串)在主串中的位置。我们平常遇到类似模式匹配的问题需求时,第一反应想到的就是朴素模式匹配算法(暴力匹配)。朴素模式匹配算法:给定一个主串S和模式串T,从主串S的第pos个字符起,与模式串的第一个字符比较,若相等,则继续逐个比较后序字符;否则从主串pos位置的下一个字符起,重新和模式串的字符比较。以此类推,直至模式串T中的每个字符依次和主串S中的一个连续字符序列相等,则匹配成功。函数返回与模式串T中第一个字符相等的字符在主串S中的下标。匹配不原创 2020-07-26 16:40:33 · 1166 阅读 · 0 评论 -
【数据结构·考研】链表插排
题目: 对带头结点的单链表 Head 进行插入排序,排序后结点值从小到大排序。思路:链表不同于顺序表,不能实现从待排序结点从后向前的遍历,所以将链表分为两部分,一部分有序一部分无序,将无序的部分依次插入到有序的部分中来。void LinkInsertSort(LinkList& head){ if (head->next == NULL) return; //空表返回 //准备操作 ListNode* cur; //cur指向当前待插入的结点 ListNod.原创 2020-11-09 21:23:30 · 222 阅读 · 0 评论 -
【数据结构·考研】返回链表倒数第k个结点的值
1、返回倒数第 k 个节点链表就是用线穿起来的一串珠子,求解链表问题最常用的就是双指针法乃至三指针法。实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。注意:本题相对原题稍作改动示例:输入: 1->2->3->4->5 和 k = 2输出: 4说明:给定的 k保证是有效的。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/kth-node-from-end-of-list-lcci.原创 2021-01-02 12:34:27 · 375 阅读 · 0 评论 -
【数据结构·考研】循环双端队列
设计循环双端队列设计实现双端队列。你的实现需要支持以下操作:MyCircularDeque(k):构造函数,双端队列的大小为k。insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true。insertLast():将一个元素添加到双端队列尾部。如果操作成功返回 true。deleteFront():从双端队列头部删除一个元素。 如果操作成功返回 true。deleteLast():从双端队列尾部删除一个元素。如果操作成功返回 true。getFront():原创 2021-01-02 12:15:11 · 451 阅读 · 0 评论 -
【数据结构·考研】约瑟夫环
约瑟夫环约瑟夫问题是个著名的问题:N个人围成一圈,第一个人从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。例如只有三个人,把他们叫做A、B、C,他们围成一圈,从A开始报数,假设报2的人被杀掉。首先A开始报数,他报1。侥幸逃过一劫。 然后轮到B报数,他报2。非常惨,他被杀了 C接着从1开始报数 接着轮到A报数,他报2。也被杀死了。 最终胜利者是C现如今给定一个队伍人数 M ,和一个报数淘汰号 N ,编写程序依次输出淘汰的人的编号,编号从.原创 2020-09-15 01:34:37 · 584 阅读 · 0 评论 -
【数据结构·考研】验证回文串
验证回文串说明:回文串是一个正读和反读都一样的字符串,我们将空字符串定义为有效的回文串。示例:输入: "level", 输出: true。最基本的回文串问题,可以用双指针分别由前往后检索和由后往前检索,如果最后相遇则是回文串。可以利用一个栈来通过压入前半段,来判断后半段;或者全部压入,再与字符串从后往前比较。也可以利用递归的来做,与双指针的思想实际一模一样。代码如下:#include<iostream>#include<stack>#include<c原创 2020-08-18 10:56:13 · 318 阅读 · 0 评论 -
【数据结构·考研】删除链表中等于给定值val的所有节点
删除链表中等于给定值val的所有节点备注:链表不带头结点。思路:非递归的解法,需要一个 pre 指针一直指到 val 值结点的上一个结点。但是考虑到链表没有头结点,所以如果首元结点的值为val,就直接头指针后移,然后释放上一个结点就行。递归的解法只需要设置一个指针,遍历完这个结点以后,把后续的任务交给下一层来完成,每一层都在删除完 val 结点后直接把上一层的 next 域改为了 val 值结点的下一个结点的地址,完成了删除后的链接。#include<iostream>#in原创 2020-08-18 10:38:42 · 494 阅读 · 0 评论 -
【数据结构·考研】有序链表的合并
有序链表的合并题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。输入:1->2->4, 1->3->4输出:1->1->2->3->4->4链表没有头结点。有序合并的思想类似归并排序。非递归的解决方式就是设置一个指针p一直标记着上一个合并完毕的结点的下一个结点,p在 l1 和 l2 之间来回移动,直到完成匹配。递归的解决方式就是不停的把确定新的有序链表下一个结点的任务交给下一层递归来完成,当两原创 2020-08-18 10:23:37 · 259 阅读 · 0 评论 -
【数据结构·考研】循环队列处理队满和队空的三种方式
循环队列处理队满和队空的方式顺序存储的队列在队满时再进队出现的溢出往往是假溢出,即还有空间但用不上,为了有效利用队列空间,可将队列元素存放数组首尾相接,形成循环队列。但是构造循环队列时不得不考虑到的问题就是如果不加以限制,队空和队满的情况是相同的。即队头指针和队尾指针的指向相同。一般来说有以下三种解决方式:1、牺牲一个单元来区分队空和队满,也是普遍在利用的方式。队满:(rear + 1)% QueueSize == front队空:front == rear队长:(rear -原创 2020-08-18 19:18:26 · 4613 阅读 · 0 评论 -
【数据结构·考研】判断出栈序列是否正确
判断出栈序列题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。备注:例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。思路,考研中经常出现判断出栈序列是否合理的选择题,这样的题我们就是用入栈序列一边入栈,然后观察出栈序列的首元素,当入栈元素与出栈序列首元素相同时,就出栈,并且用入栈序列新的栈顶元素与出栈序列的第二个元素相比较,如果相同继续执行上述步骤,如原创 2020-08-16 11:25:34 · 1845 阅读 · 0 评论 -
【数据结构·考研】共享栈
双栈共享一个栈空间原创 2020-08-16 11:04:12 · 1559 阅读 · 2 评论 -
【数据结构·考研】字符串相加与字符串相乘
415. 字符串相加给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/add-strings著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题思路:本题我们只需要对两个大整数模拟「竖式加法」的过程。对应位置的两个整数相加之后,如果当前位和超过 10,则向高位进一位。我们定义两个指针 i 和 j 分别指向 num1和 num2 的末尾,即最低位,原创 2020-08-13 15:48:29 · 347 阅读 · 0 评论 -
【数据结构·考研】栈和队列的互相模拟
栈模拟队列用栈来模拟队列需要两个栈,一个栈s2用于模拟队首,一个栈s1用以压入元素。代码如下:#include<iostream>using namespace std;#define MaxSize 100//栈的常规操作定义 typedef struct{ int data[MaxSize]; int top = -1;}SqStack;bool StackEmpty(SqStack S){ return S.top == -1;}bool Push原创 2020-08-12 18:53:03 · 311 阅读 · 0 评论 -
【数据结构·考研】队列实现杨辉三角的打印
队列实现杨辉三角的打印也可以叫做队列打印二项式系数。思路:队列可以实现第 i 行数据计算并存放第 i+1 行数据,第 i 行每个元素出队都会有新的第 i+1 元素入队。我们设置一个 s 和 t 表示两个数字相加,以此得到新的一行中的数字。杨辉三角的第 i+1 行总是比第 i 行多1个元素,我们可以通过在每一行末尾补0来实现这种每行数字个数的增长,同时也解决了每一行第一个数字的来源,即由上一行的上一行末尾的 0 和上一行第一个数字 1 相加而来。s 不停被赋值为 t 的前一个元素,每出队一个原创 2020-08-21 09:18:13 · 892 阅读 · 0 评论 -
【数据结构·考研】进制转换
任意进制转换输入一个十进制数N,将它转换成R进制数输出。2<=R<=16, R<>10,如果R大于10,则对应的数字规则参考16进制(比如10用A表示,等等)。因为除余的顺序和输出的顺序是相反的,可以想到用栈来解决。代码如下:#include<iostream>#include<stack>#include<cmath>using namespace std;void conversion(int N,int R) {原创 2020-08-20 09:39:37 · 310 阅读 · 0 评论