![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
拓展操作
对常用数据结构拓展
曼切斯特的流氓
007
展开
-
二进制数字环问题
全排列原创 2022-10-06 16:01:25 · 345 阅读 · 4 评论 -
单链表归并排序c语言
单链表的归并排序原创 2022-09-22 20:32:33 · 359 阅读 · 0 评论 -
[图论]--将邻接表转换为临接矩阵
代码】[图论]--将邻接表转换为临接矩阵。原创 2022-07-14 23:26:15 · 120 阅读 · 0 评论 -
利用两个栈实现队列操作
利用栈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 评论 -
数组逆置(C语言)
void Reverse(DataType A[],int left,int right,int arraySize){ if(left>=right||right>=arraySize)return false; int mid=(left+right)/2; for(int i=0; i<=mid-left; i++) { DataType temp=A[left+i]; A[left+i]=A[right-i];原创 2022-04-25 19:47:58 · 620 阅读 · 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,*LinkList; //相当于取别名,LNode代表一个节点,LinkList代表整个单链表(指向L原创 2022-05-08 20:55:15 · 555 阅读 · 0 评论 -
寻找两个链表共同结点
寻找链表第一个相同结点这个相同结点是指,中间某个结点的next指针,指向同一片区域,并不是仅仅元素值相同解决步骤1、使用两个指针,先求出L1,L2的长度2、先用一个指针p,将长链表,遍历到和短链表相同长度(p每次向后移动)3、两个指针同时一起向后移动,直到指向相同结点位置实现代码#include <stdio.h>#include <stdlib.h>#include<stdbool.h>typedef int Elemtype;//单原创 2022-05-08 21:35:53 · 922 阅读 · 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 评论 -
删除有序链表中重复元素
删除有序链表中重复元素使用两个指针,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 评论 -
寻找两个递增有序链表的交集
寻找两个递增有序链表的交集利用两个指针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 评论 -
判断单链表是否环化和寻找环的起点
首先判断链表是否环化我们可以使用一对"快慢指针",快指针每次走两步,慢指针每次走一步,同时从起点出发,依次向后遍历链表,如果两个指针相遇则一定存在环,如果不能相遇则不存在环实现代码 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 评论 -
双向链表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 评论 -
判断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 评论 -
数组两段区间互换位置问题
FROM王道2.23 08题目描述在一维数组A[m+n]中依次存放两个线性表,(a1,a2,…am)和(b1,b2,…bn)编写一个函数,将数组中两个顺序表的位置呼唤,即将(b1,b2…bn)放在(a1,a2…am)前面,线性表A和B的内部位置不能改变解题思路首先要将(b1,b2…bn)放在(a1,a2…am)的前面,先不用考虑内部顺序,所以直接将数组逆置,得到(bn,bn-1…b1,am,am-1…a1) ,在将数组下标[0,n-1]区间逆转的到(b1…bn,am…a1),[n,m+n-1原创 2022-04-26 21:26:33 · 474 阅读 · 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 评论 -
链表重构(两个经典例题)
题目将链表{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 评论 -
寻找链表中倒数第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 评论 -
双向循环链表的创建和尾插法
#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 评论 -
反向打印链表(递归)
反向打印链表(递归)每次向下递归直到链表为空,向上返回,依次输出当前结点的值代码实现#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 评论