![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
考研数据结构模板
曼切斯特的流氓
007
展开
-
动态中位数(对顶堆)
维护两个性质:1、小根堆元素>=大根堆元素2、大根堆元素个数比小根堆元素个数多1。上面是一个小根堆,下面是一个大根堆。结果出堆大根堆top即可。原创 2023-06-04 17:33:42 · 344 阅读 · 0 评论 -
图论算法总结
图论算法考研模板原创 2022-09-23 19:41:14 · 333 阅读 · 0 评论 -
单链表归并排序c语言
单链表的归并排序原创 2022-09-22 20:32:33 · 359 阅读 · 0 评论 -
二叉排序树(C语言)
二叉排序树原创 2022-07-26 21:03:09 · 921 阅读 · 0 评论 -
图邻接表(深搜和广搜遍历C语言)
代码】图邻接表(深搜和广搜遍历C语言)原创 2022-07-16 21:46:05 · 345 阅读 · 0 评论 -
[图论]--将邻接表转换为临接矩阵
代码】[图论]--将邻接表转换为临接矩阵。原创 2022-07-14 23:26:15 · 120 阅读 · 0 评论 -
王道数据结构习题代码5.4.5(树和森林)
王道数据结构原创 2022-07-02 20:48:39 · 225 阅读 · 0 评论 -
王道数据结构习题代码5.3.3(树与二叉树)
王道考研习题代码原创 2022-06-09 23:09:35 · 477 阅读 · 0 评论 -
中序线索二叉树
中序线索二叉树原创 2022-06-08 22:32:43 · 90 阅读 · 0 评论 -
二叉树的遍历(C语言)
二叉树遍历大全原创 2022-06-08 00:20:12 · 3694 阅读 · 1 评论 -
KMP算法(多种实现方式)
KMP算法核心思想利用已经匹配的数据,去除无效的从头匹配KMP算法流程首先我们找到 i=9,j=9时不匹配,如果时暴力算法,此时i应重新来到i=2的位置,j返回j=1的位置,开始新一轮的匹配这样暴力匹配,就白白浪费了已经匹配的串,那么问题来了,我们应该如何利用已经匹配的串呢??我们看着图片,假设i返回i=1,j返回j=1,当i++,i指向b,j++,j指向a,此时就不匹配了,又要重新开始,i来到3,j又回到j=1,双方指向第一个元素就不匹配,kmp算法的核心就是过滤掉这种低效的匹配,我原创 2022-05-28 22:10:15 · 10117 阅读 · 5 评论 -
利用两个栈实现队列操作
利用栈s1和s2,s1负责入队,s2负责出队EnQueue:当执行入队操作时,先判断s1是否满,如果s1满了,需要将s1元素全部移动到s2中,如果此时s2中已经有元素存在,此时不能移动,因为如果移动到s2,则队列出队顺序会混乱! 此时抛出队满即可,如果s2为空,将元素移动到s2,在入栈s1,即可完成入队!DeQueue:出队时,判断s2是否为空,如果为空先将s1中元素移动到s2中,在将s2中元素出栈即可,若不为空直接将s2栈顶元素出栈#include <stdio.h>#in.原创 2022-05-25 21:20:46 · 255 阅读 · 0 评论 -
栈实现递归
#include <stdio.h>#include <stdlib.h>#include<stdbool.h>#define MaxSize 50typedef char ElemType;/*利用栈计算递归表达式Pn(x)= 1 ,n=0; = 2x ,n=1; = 2xPn-1(x)-2(n-1)Pn-2(x) ,n>1 */double p(int n,double x){ struct原创 2022-05-25 21:14:26 · 910 阅读 · 0 评论 -
括号匹配(栈应用)
左括号直接入栈,遇见右括号,从栈顶取出元素,进行匹配,最后判断栈是否为空即可!#include <stdio.h>#include <stdlib.h>#include<stdbool.h>#define MaxSize 50typedef char ElemType;typedef struct{ ElemType data[MaxSize]; int top;} SqStack;bool InitStack(SqStack.原创 2022-05-25 21:13:40 · 89 阅读 · 0 评论 -
王道数据结构习题代码3.3.7(栈和队列的应用)
第一题(括号匹配)#include <stdio.h>#include <stdlib.h>#include<stdbool.h>#define MaxSize 50typedef char ElemType;typedef struct{ ElemType data[MaxSize]; int top;} SqStack;bool InitStack(SqStack *s){ s->top=-1;//初始化栈}原创 2022-05-22 14:51:47 · 311 阅读 · 0 评论 -
栈和队列的应用大全
应用一:栈在括号匹配中的应用#include <stdio.h>#include <stdlib.h>#include<stdbool.h>#define MaxSize 50typedef char ElemType;typedef struct{ ElemType data[MaxSize]; int top;} SqStack;bool InitStack(SqStack *s){ s->top=-1;//初原创 2022-05-22 12:56:45 · 1739 阅读 · 0 评论 -
队列链式存储基本操作(C语言)
#include <stdio.h>#include <stdlib.h>#include<stdbool.h>#define MaxSize 50typedef int ElemType;typedef struct LinkNode{ ElemType data; struct LinkNode *next;} LinkNode;typedef struct{ LinkNode *front,*rear;//队头指针,原创 2022-05-16 17:39:19 · 354 阅读 · 0 评论 -
王道数据结构习题代码3.2.5(队列)
第一题(tag标记队满或队空)#include <stdio.h>#include <stdlib.h>#include<stdbool.h>#define MaxSize 50typedef int ElemType;typedef struct SqQueue{ ElemType data[MaxSize]; int front; int rear; int tag;//tag为0队空,tag为1队满} SqQueu原创 2022-05-21 23:53:44 · 440 阅读 · 0 评论 -
王道数据结构代码3.1.5(栈)
第三题(入栈出栈序列的合法性)#include <stdio.h>#include <stdlib.h>#include<stdbool.h>#define MaxSize 50 //定义栈中元素最大个数typedef int ElemType;bool Judge(char A[]){ int i=0; int j=0,k=0; while(A[i]!='\0') { switch(A[i]){原创 2022-05-15 21:07:42 · 348 阅读 · 0 评论 -
循环队列基本操作代码(C语言)
#include <stdio.h>#include <stdlib.h>#include<stdbool.h>#define MaxSize 50typedef int ElemType;typedef struct SqQueue{ ElemType data[MaxSize]; int front;//定义头指针 int rear; //定义尾指针} SqQueue;//初始化队列bool InitQueue(Sq原创 2022-05-16 16:46:54 · 2962 阅读 · 0 评论 -
栈的基本操作(链式存储)
#include <stdio.h>#include <stdlib.h>#include<stdbool.h>#define MaxSize 50 //定义栈中元素最大个数typedef int ElemType;typedef struct StackNode{ ElemType data; struct StackNode *next;} StackNode,*LinkStack;//初始化一个带头节点的链式栈void In原创 2022-05-14 16:25:58 · 429 阅读 · 3 评论 -
共享栈基本操作(C语言)
共享栈共享站可以让两个顺序栈共享一个一维数组空间基本操作判断栈为空:当top0==-1时,0号栈为空,top1==MaxSize时1号栈为空判断栈满:(top1-top0=1)时栈满添加元素:0号栈进栈时,top0先自增1,在赋值1号栈,先自减,在赋值出栈:与入栈相反实现代码#include <stdio.h>#include <stdlib.h>#include<stdbool.h>#define MaxSize 50 //原创 2022-05-14 15:33:29 · 1049 阅读 · 3 评论 -
栈的基本操作(顺序存储)
使用顺序存储,使用数组完成#include <stdio.h>#include <stdlib.h>#include<stdbool.h>#define MaxSize 50 //定义栈中元素最大个数typedef int ElemType;typedef struct{ ElemType data[MaxSize];//存放栈中元素 int top;//栈顶指针} SqStack;//栈的初始化void InitSta.原创 2022-05-14 14:41:33 · 166 阅读 · 0 评论 -
双向链表Locate按访问频率排序
双向链表Locate按访问频率排序1、首先找到该元素第一个值2、拿出前面结点,用来寻找合适位置插入(根据频率比较,如果小于当前频率就向前移动)3、找到合适位置插入实现代码#include <stdio.h>#include <stdlib.h>#include<stdbool.h>//双向链表typedef int Elemtype;typedef struct DNode{ Elemtype data,freq; struct原创 2022-05-10 20:01:12 · 767 阅读 · 0 评论 -
寻找链表中倒数第K个位置的元素(只能遍历一遍)
寻找链表中倒数第K个位置的元素(只能遍历一遍)由于只能遍历一遍链表,我们无法先获取链表长度,在遍历到倒数第k个位置,这样的操作是遍历两次链表用两个指针p、q其中p先走k步,然后q在和p同时走,当p到达结尾时,q正好在倒数第k个位置实现代码#include <stdio.h>#include <stdlib.h>#include<stdbool.h>typedef int Elemtype;typedef struct LNode{ E原创 2022-05-09 20:37:31 · 373 阅读 · 0 评论 -
判断B链表是否为A链表的子序列
判断B链表是否为A链表的子序列类似与字符串中判断是否为子串问题,从两个链表的第一个结点开始,若对应数据相等,则指针后移,若对应数据不等,则A链表从上次开始比较结点后继开始,B仍然从第一个结点开始比较实现代码#include <stdio.h>#include <stdlib.h>#include<stdbool.h>typedef int Elemtype;typedef struct LNode{ Elemtype data; s原创 2022-05-09 18:56:14 · 804 阅读 · 0 评论 -
判断单链表是否环化和寻找环的起点
首先判断链表是否环化我们可以使用一对"快慢指针",快指针每次走两步,慢指针每次走一步,同时从起点出发,依次向后遍历链表,如果两个指针相遇则一定存在环,如果不能相遇则不存在环实现代码 LNode *fast=L->next,*slow=L->next;//使用快慢指针 while(fast!=NULL&&fast->next!=NULL) { slow=slow->next; fast=fast->next原创 2022-05-09 20:05:09 · 240 阅读 · 0 评论 -
寻找两个递增有序链表的交集
寻找两个递增有序链表的交集利用两个指针p、q遍历两个链表,当p的元素等于q的元素值时,添加进入结果链表中,如果p的数据小于q的数据时,p向下移动,否则q向下移动实现代码#include <stdio.h>#include <stdlib.h>#include<stdbool.h>typedef int Elemtype;typedef struct LNode{ Elemtype data; struct LNode *next;原创 2022-05-09 18:24:36 · 755 阅读 · 0 评论 -
删除有序链表中重复元素
删除有序链表中重复元素使用两个指针,p用来遍历链表,q每次指向p的下一个位置,若p->data==q->data则删除q实现代码#include <stdio.h>#include <stdlib.h>#include<stdbool.h>typedef int Elemtype;typedef struct LNode{ Elemtype data; struct LNode *next;} LNode,*Link原创 2022-05-09 17:57:40 · 1980 阅读 · 0 评论 -
链表重构(两个经典例题)
题目将链表{a1,b1,a2,b2,a3,b3…an,bn}转换为{a1,a2…an}、{bn,bn-1…b1}b为逆序(逆序使用头插法)解题思路#include <stdio.h>#include <stdlib.h>#include<stdbool.h>typedef int Elemtype;typedef struct LNode{ Elemtype data; struct LNode *next;} LNode,*原创 2022-05-09 00:01:48 · 293 阅读 · 0 评论 -
插入排序使得链表有序
#include <stdio.h>#include <stdlib.h>#include<stdbool.h>typedef int Elemtype;//单链表typedef struct LNode{ Elemtype data;//存放数据 struct LNode *next; //指向LNode的一个指针} LNode,*LinkList; //相当于取别名,LNode代表一个节点,LinkList代表整个单链表(指向L原创 2022-05-08 20:55:15 · 555 阅读 · 0 评论 -
原地逆转链表
头插法原地逆转链表根据头插法特性,将原来链表断开,重新使用头插法,新建//头插法逆转链表LinkList Reverse_List(LinkList L){ LNode *p,*r; p=L->next; L->next=NULL;//将L置空,重新开始 while(p!=NULL) { r=p->next; p->next=L->next; L->next=p;原创 2022-05-08 20:38:16 · 717 阅读 · 0 评论 -
反向打印链表(递归)
反向打印链表(递归)每次向下递归直到链表为空,向上返回,依次输出当前结点的值代码实现#include <stdio.h>#include <stdlib.h>#include<stdbool.h>typedef int Elemtype;//单链表typedef struct LNode{ Elemtype data;//存放数据 struct LNode *next; //指向LNode的一个指针} LNode,*Lin原创 2022-05-08 19:53:08 · 754 阅读 · 0 评论 -
递归删除链表中值为X的结点
递归删除链表中值为X的结点在递归方法中传入,当前结点,和它的前驱结点pre,如果当前结点cur的值data为x,则删除当前结点,pre->next=cur->next,不然继续向下递归实现代码#include <stdio.h>#include <stdlib.h>#include<stdbool.h>typedef int Elemtype;//单链表typedef struct LNode{ Elemtype data原创 2022-05-08 19:47:38 · 1028 阅读 · 0 评论 -
双向循环链表的创建和尾插法
#include <stdio.h>#include <stdlib.h>#include<stdbool.h>typedef int Elemtype;typedef struct DNode{ Elemtype data; struct DNode *prior,*next;}DNode,*DLinkList;DLinkList CreateList(){ int x; //双向循环链表初始化 DLinkL原创 2022-05-04 19:55:17 · 892 阅读 · 1 评论 -
王道数据结构习题代码2.3.8(链表)
第一题(链表中递归删除元素x)#include <stdio.h>#include <stdlib.h>#include<stdbool.h>//双向链表typedef int Elemtype;typedef struct LNode{ Elemtype data; struct LNode *next;} LNode,*LinkList;void Delete_x(LNode *P,LNode *C,Elemtype e)原创 2022-05-02 00:06:13 · 1233 阅读 · 3 评论 -
双向链表基本操作(C语言)
#include <stdio.h>#include <stdlib.h>#include<stdbool.h>//双向链表typedef int Elemtype;typedef struct DNode{ Elemtype data; struct DNode *prior,*next;} DNode,*DLinkList;//尾插法创建链表DLinkList CreateList(){ int x; DLin原创 2022-04-29 22:36:17 · 3157 阅读 · 5 评论 -
单链表操作大全(C语言)
#include <stdio.h>#include <stdlib.h>#include<stdbool.h>typedef int Elemtype;//单链表typedef struct LNode{ Elemtype data;//存放数据 struct LNode *next; //指向LNode的一个指针} LNode,*LinkList; //相当于取别名,LNode代表一个节点,LinkList代表整个单链表(指向L原创 2022-04-28 23:12:47 · 1759 阅读 · 0 评论 -
单链表的头插法和尾插法(C语言)
#include <stdio.h>#include <stdlib.h>#include<stdbool.h>typedef int Elemtype;//单链表typedef struct LNode{ Elemtype data;//存放数据 struct LNode *next; //指向LNode的一个指针} LNode,*LinkList; //相当于取别名,LNode代表一个节点,LinkList代表整个单链表(指向L原创 2022-04-27 23:29:52 · 1453 阅读 · 0 评论 -
数组中抵消思想
FROM王道2.23 12(2013真题)题目描述解题思路寻找主元过程中采用抵消思想,简单来说就是"一换一",只要相同元素,则cnt++,不相同cnt–实行抵消,当cnt为0时,更换新的元素上来赋值cnt=0,依次类推,最后得到主元素,注意题目中的字节要cnt>n/2才行代码实现#include <stdio.h>#include <stdlib.h>#include<stdbool.h>#define maxn 100typedef原创 2022-04-26 21:36:29 · 375 阅读 · 0 评论