当前位置: 首页 > news >正文

31.链表练习题(2)(王道2023数据结构2.3.7节16-25题)

【前面使用的所有链表的定义在第29节】

试题16:两个整数序列A,B存在两个单链表中,设计算法判断B是否是A的连续子序列。

bool Pattern(LinkList L1,LinkList L2){
//此函数实现比较L1的子串中是否有L2LNode *p, *q;  //工作在L1,p记录L1子串的首元LNode *r;  //工作在L2p = L1->next;q = L1->next;r = L2->next;while(q!=NULL && r!=NULL){if(q->data == r->data){  //p指针不动,q,r指针后移q = q->next;r = r->next;}else{r = L2->next;  //L2指针归零p = p->next;  //L1指针后移q = p;}}if(r == NULL){return true;}else{return false;}
}int main(){LinkList L1, L2;InitList(L1);Create(L1);PrintList(L1);InitList(L2);Create(L2);PrintList(L2);printf("%d",Pattern(L1,L2));return 0;
}

输出:

当前单链表的所有元素:[3] [1] [2] [5] [4]
当前单链表的所有元素:[1] [2]
1当前单链表的所有元素:[1] [2] [3] [4] [5]
当前单链表的所有元素:[6] [7] [8]
0

试题17:设计一个算法判断带头结点的循环双链表是否对称。

这里需要重新书写双链表的结构体定义,不能采用29节的代码。完整代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>#define MAXSIZE 100
#define ElemType int
#define Status int//循环双链表的数据结构,一个结点,两个指针分别指向前驱和后继。
typedef struct LNode
{ElemType data;struct LNode *next,*prior;
}LNode, *LinkList;//初始化
int InitList(LinkList &L)
{L = (LNode *)malloc(sizeof(LNode));L->next = NULL;L->prior = NULL;return 1;
}//输出
void PrintList(LinkList L)
{printf("当前单链表的所有元素:");LNode *p;p = L->next;while (p != L){printf("[%d] ", p->data);p = p->next;}printf("\n");
}//尾插法创建单链表
int Create(LinkList &L)
{int n, e;LNode *temp = L;//声明一个指针指向头结点,用于遍历链表   printf("请输入要输入元素的个数:");scanf("%d", &n);for (int i = 1; i <= n; i++){LNode *a = (LNode*)malloc(sizeof(LNode));printf("请输入第%d元素的值:", (i));scanf("%d", &e);a->data = e;temp->next = a;a->next = NULL;a->prior = temp;temp = temp->next;}temp->next = L;L->prior = temp;return 1;
}//插入元素
int InsertList(LNode *L, int i, ElemType e)
{LNode *p = L;int j = 0;while (p && (j < i - 1))  //寻找要插入位置的前驱结点,让p指向它{p = p->next;++j;}if (!p || j > i - 1) return 0;	//插入位置非法,返回0LNode *s = (LNode *)malloc(sizeof(LNode));s->data = e;  //创建一个新结点存放要插入的元素es->next = p->next;  //把新结点的指针域指向p->nexts->prior = p;p->next = s;  //把p->next指向要插入的新结点p = p->next;s = s->next;s->prior = p;return 1;
}//删除元素
int DeleteList(LNode *L, int i)
{LNode *p = L;int j = 0;while (p->next && (j < i - 1))	//寻找要删除结点的前驱结点,让p指向它{p = p->next;++j;}if (!p->next || j > i - 1) return 0;  //删除位置非法,返回0LNode *q;q = p->next;  //暂存删除结点,以便随后释放p->next = q->next;	//把p->next指向p->next->next,即q->nextq->next->prior = p;free(q);  //释放结点return 1;
}//按值查找元素
int LocateElem(LNode *L, ElemType e)
{int i = 1;LNode *p = L->next;while (p!=L && p->data != e)		//从第一个结点开始,依次向后遍历比较{p = p->next;i++;}if(p)	return i;else	return 0;	
}bool Symmetry(LinkList L){
//此函数实现判断循环双链表是否对称LNode *p, *q;p = L->next;  //第一个元素q = L->prior;  //最后一个元素while(p!=q&&p->next!=q){  //奇数个元素的结束条件:p=q,偶数个:p->next=qif(p->data == q->data){p = p->next;q = q->prior;}elsereturn false;}return true;
}int main(){LinkList L1;InitList(L1);Create(L1);PrintList(L1);printf("%d",Symmetry(L1));return 0;
}

输出:

当前单链表的所有元素:[1] [2] [3] [2] [1]
1当前单链表的所有元素:[1] [2] [3] [3] [2] [1]
1当前单链表的所有元素:[1] [2] [3] [4] [3] [3] [1]
0

试题18:有两个循环单链表,链表头指针分别是L1和L2,编写一个函数将链表L2链接到链表L1之后,要求链接后的链表仍保持循环链表形式。

这里同样不能直接采用29节的代码,不过在建立单链表的最后加一句temp=L即可。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>#define MAXSIZE 100
#define ElemType int
#define Status int//循环单链表的数据结构,尾结点指针指向表头结点。
typedef struct LNode
{ElemType data;struct LNode *next;
}LNode, *LinkList;//初始化
int InitList(LinkList &L)
{L = (LNode *)malloc(sizeof(LNode));L->next = L;return 1;
}//输出
void PrintList(LinkList L)
{printf("当前单链表的所有元素:");LNode *p;p = L->next;while (p != L){printf("[%d] ", p->data);p = p->next;}printf("\n");
}//尾插法创建单链表
int Create(LinkList &L)
{int n, e;LNode *temp = L;//声明一个指针指向头结点,用于遍历链表   printf("请输入要输入元素的个数:");scanf("%d", &n);for (int i = 1; i <= n; i++){LNode *a = (LNode*)malloc(sizeof(LNode));printf("请输入第%d元素的值:", (i));scanf("%d", &e);a->data = e;temp->next = a;a->next = NULL;temp = temp->next;}temp->next = L;return 1;
}//插入元素
int InsertList(LNode *L, int i, ElemType e)
{LNode *p = L;int j = 0;while (p && (j < i - 1))  //寻找要插入位置的前驱结点,让p指向它{p = p->next;++j;}if (!p || j > i - 1) return 0;	//插入位置非法,返回0LNode *s = (LNode *)malloc(sizeof(LNode));s->data = e;  //创建一个新结点存放要插入的元素es->next = p->next;  //把新结点的指针域指向p->nextp->next = s;  //把p->next指向要插入的新结点return 1;
}//删除元素
int DeleteList(LNode *L, int i)
{LNode *p = L;int j = 0;while (p->next && (j < i - 1))	//寻找要删除结点的前驱结点,让p指向它{p = p->next;++j;}if (!p->next || j > i - 1) return 0;  //删除位置非法,返回0LNode *q;q = p->next;  //暂存删除结点,以便随后释放p->next = q->next;	//把p->next指向p->next->next,即q->nextfree(q);  //释放结点return 1;
}//按值查找元素
int LocateElem(LNode *L, ElemType e)
{int i = 1;LNode *p = L->next;while (p!=L && p->data != e)		//从第一个结点开始,依次向后遍历比较{p = p->next;i++;}if(p)	return i;else	return 0;	
}LinkList Link(LinkList L1,LinkList L2){
//此函数实现判断循环双链表是否对称LNode *p, *q;p = L1->next;  //L1工作指针q = L2->next;  //L2工作指针,首先找到L1,L2最后一个元素while(p->next!=L1){p = p->next;	}while(q->next!=L2){q = q->next;	}p->next = L2->next;q->next = L1;free(L2);return L1;
}int main(){LinkList L1,L2;InitList(L1);Create(L1);PrintList(L1);InitList(L2);Create(L2);PrintList(L2);PrintList(Link(L1,L2));return 0;
}

输出:

请输入要输入元素的个数:4
请输入第1元素的值:1
请输入第2元素的值:2
请输入第3元素的值:3
请输入第4元素的值:4
当前单链表的所有元素:[1] [2] [3] [4]
请输入要输入元素的个数:5
请输入第1元素的值:5
请输入第2元素的值:6
请输入第3元素的值:7
请输入第4元素的值:8
请输入第5元素的值:9
当前单链表的所有元素:[5] [6] [7] [8] [9]
当前单链表的所有元素:[1] [2] [3] [4] [5] [6] [7] [8] [9]

试题19:不断输出并删除最小值结点。此题非常同试题4.略过。

试题20:设头指针为L的带有表头结点的非循环双向链表,其每个结点中除有prior(前驱指针),data(数据),next(后继指针)域外,还有一个访问频度域freq。在链表被启用前,其值均初始化为零。每当在连表中进行一次Locate(L,x)运算时,令元素值为x的结点中freq域的值增1,并使此链表中结点保持按访问频度非递增的顺序排列,同时最近访问的结点排在频度相同的结点的前面,以便使频繁访问的结点总是靠近表头。试编写符合上述要求的Locate(L,x)运算的算法,该运算为函数过程,返回找到结点的地址,类型为指针型。

思路:这题就调整指针。由于是双链表所以找前驱后继都很方便。重新书写双链表的结构体类型然后作答:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>#define MAXSIZE 100
#define ElemType int
#define Status int//双链表带freq域的数据结构
typedef struct LNode
{ElemType data;int freq;struct LNode *next,*prior;
}LNode, *LinkList;//初始化
int InitList(LinkList &L)
{L = (LNode *)malloc(sizeof(LNode));L->next = NULL;L->prior = NULL;return 1;
}//输出
void PrintList(LinkList L)
{printf("当前链表的所有元素:");LNode *p;p = L->next;while (p != NULL){printf("[%d]%d ", p->data,p->freq);p = p->next;}printf("\n");
}//尾插法创建双链表
int Create(LinkList &L)
{int n, e;LNode *temp = L;//声明一个指针指向头结点,用于遍历链表   printf("请输入要输入元素的个数:");scanf("%d", &n);for (int i = 1; i <= n; i++){LNode *a = (LNode*)malloc(sizeof(LNode));printf("请输入第%d元素的值:", (i));scanf("%d", &e);a->data = e;a->freq = 0;temp->next = a;a->prior = temp;a->next = NULL;temp = temp->next;}return 1;
}//按位插入元素
int InsertList(LNode *L, int i, ElemType e)
{LNode *p = L;int j = 0;while (p && (j < i - 1))  //寻找要插入位置的前驱结点,让p指向它{p = p->next;++j;}if (!p || j > i - 1) return 0;	//插入位置非法,返回0LNode *s = (LNode *)malloc(sizeof(LNode));s->data = e;  //创建一个新结点存放要插入的元素es->freq = 0;s->next = p->next;  //把新结点的指针域指向p->nextp->next->prior = s;p->next = s;  //把p->next指向要插入的新结点s->prior = p;return 1;
}//删除元素
int DeleteList(LNode *L, int i)
{LNode *p = L;int j = 0;while (p->next && (j < i - 1))	//寻找要删除结点的前驱结点,让p指向它{p = p->next;++j;}if (!p->next || j > i - 1) return 0;  //删除位置非法,返回0LNode *q;q = p->next;  //暂存删除结点,以便随后释放p->next = q->next;	//把p->next指向p->next->next,即q->nextq->next->prior = p;free(q);  //释放结点return 1;
}//按值查找元素
int LocateElem(LNode *L, ElemType e)
{int i = 1;LNode *p = L->next;LNode *q;  //q用来向前遍历,寻找比其freq值大的结点while (p&&p->data != e)  //从第一个结点开始,依次向后遍历比较{p = p->next;i++;}if(p){p->freq ++;q = p;while(q->freq <= p->freq && q!=L){q = q->prior;}p->prior->next = p->next;p->next->prior = p->prior;p->next = q->next;p->prior = q;q->next = p;p->next->prior = p;return i;}elsereturn 0;
}int main(){LinkList L;InitList(L);Create(L);PrintList(L);printf("查找的元素在第%d位\n",LocateElem(L, 2));PrintList(L);printf("查找的元素在第%d位\n",LocateElem(L, 1));PrintList(L);printf("查找的元素在第%d位\n",LocateElem(L, 1));PrintList(L);return 0;
}

输出:

请输入要输入元素的个数:4
请输入第1元素的值:1
请输入第2元素的值:2
请输入第3元素的值:3
请输入第4元素的值:4
当前链表的所有元素:[1]0 [2]0 [3]0 [4]0
查找的元素在第2位
当前链表的所有元素:[2]1 [1]0 [3]0 [4]0
查找的元素在第2位
当前链表的所有元素:[1]1 [2]1 [3]0 [4]0
查找的元素在第1位

试题21:编写算法判断链表是否有环。

暴力解:首先从头节点开始,依次遍历单链表的每一个节点。每遍历到一个新节点,就从头节点重新遍历新节点之前的所有节点,用新节点ID和此节点之前所有节点ID依次作比较。如果发现新节点之前的所有节点当中存在相同节点ID,则说明该节点被遍历过两次,链表有环;如果之前的所有节点当中不存在相同的节点,就继续遍历下一个新节点,继续重复刚才的操作。

优解:快慢指针法。

//前面共同的部分省略,这里给出创建带环链表的函数,以及本题要求的函数FindLoopStart//创建一个带环的链表
int Create_Loop(LinkList &L)
{int n, e;LNode *temp = L;  //声明一个指针指向头结点,用于遍历链表   printf("请输入要输入元素的个数:");scanf("%d", &n);for (int i = 1; i <= n; i++){LNode *a = (LNode*)malloc(sizeof(LNode));printf("请输入第%d元素的值:", (i));scanf("%d", &e);a->data = e;temp->next = a;a->next = NULL;temp = temp->next;}temp->next = L->next->next;  //尾指针指向第2个结点,这样就有了环,这个函数建立的环的起始结点就是第2个return 1;
}LinkList FindLoopStart(LinkList L){LNode *fast, *slow;fast = L;slow = L;while(fast!=NULL&&fast->next!=NULL){slow = slow->next;  //慢指针走一步fast = fast->next->next;  //快指针走两步if(fast==slow){  //快慢指针相遇,退出,这时候有环break;}}if(fast==slow){  //有环的情况,一个从表头开始,一个从上面的相遇点开始,再次相遇的时候就是环的起始点slow = L;while(fast!=slow){slow = slow->next;fast = fast->next;}printf("%d\n", fast->data);return fast;}elseprintf("链表无环\n");return NULL;  //无环,返回NULL
}int main(){LinkList L1,L2;InitList(L1);Create(L1);  //无环链表PrintList(L1);InitList(L2);Create_Loop(L2);  //有环链表FindLoopStart(L1);FindLoopStart(L2);return 0;
}

输出:

链表无环
2

试题22:(2009年联考真题)

思路:设两个指针,一个指针先移动k,然后两个指针一起移动,最后第一个指针移到表尾第二个指针就是倒数第k个位置。

int Change(LinkList L,int k){
//此函数查找链表倒数第k个结点LNode *p, *q;p = L;q = L;for (int i = 0; i < k;i++){p = p->next;if(p == NULL)return 0;}while(p !=NULL){p = p->next;q = q->next;}printf("%d\n", q->data);return 1;
}int main(){LinkList L;InitList(L);Create(L);PrintList(L);printf("%d",Change(L,3));return 0;
}

输出:

当前单链表的所有元素:[1] [2] [3] [4] [5]
3
1当前单链表的所有元素:[1] [2] [3] [4] [5] [6]
4
1当前单链表的所有元素:[1] [2]
0

试题23:(2012年联考真题)

这道题和前面题8完全一致(甚至这个题直接给了你拓扑结构,比题8还简单一些),可看上一节的解析。

试题24:(2015年联考真题)

此题的思路就是以空间换时间,因为题目中出现了\left | data \right |\leq n.

int abs(int n){
//此函数用来求绝对值if(n>0)return n;elsereturn -n;
}LinkList Delete(LinkList &L,int n){
//此函数对链表中绝对值相等的结点只保留第一个,删除之后所有绝对值相等的结点LNode *p, *q;p = L;q = L->next;int a[n + 1];  //辅助数组for (int i = 0; i < n + 1;i++){a[i] = 0;}while(q!=NULL){if(a[abs(q->data)]==0){a[abs(q->data)] = 1;p = p->next;q = q->next;}else{p->next = q->next;free(q);q = p->next;}}return L;
}int main(){LinkList L;InitList(L);Create(L);PrintList(L);PrintList(Delete(L,5));return 0;
}

输出:

当前单链表的所有元素:[1] [-1] [2] [-2] [3]
当前单链表的所有元素:[1] [2] [3]前单链表的所有元素:[1] [-4] [3] [2] [-1]
当前单链表的所有元素:[1] [-4] [3] [2]

试题25:(2019年联考真题)

此题分三步走:(1)找中间结点(2)把后半段逆置(3)从前后两段每次取一个结点重排

LinkList Change(LinkList &L){
//此函数对链表a1,a2...an变为a1,an,a2,an-1...LNode *p, *q, *r, *m;p = L;q = L;while(q!=NULL && q->next !=NULL){p = p->next;q = q->next->next;}//到此指针p就是我们找的中间结点,下面对p后面的部分做倒序,也就是头插法q = p->next;p->next = NULL;  //断链r = q->next;while(q!=NULL){q->next = p->next;p->next = q;q = r;if(r == NULL)break;r = r->next;}//到此我们完成了后面序列的倒序操作,接下来从L和p分别输出。q = L->next;r = p->next;p->next = NULL;p = q->next;while(q!=NULL){q->next = r;if(r ==NULL)break;r = r->next;q = q->next;q->next = p;if(p==NULL)break;p = p->next;q = q->next;}return L;
}int main(){LinkList L;InitList(L);Create(L);PrintList(L);PrintList(Change(L));return 0;
}

输出:

当前单链表的所有元素:[1] [2] [3] [4] [5]
当前单链表的所有元素:[1] [5] [2] [4] [3]当前单链表的所有元素:[1] [2] [3] [4] [5] [6]
当前单链表的所有元素:[1] [6] [2] [5] [3] [4]

相关文章:

31.链表练习题(2)(王道2023数据结构2.3.7节16-25题)

【前面使用的所有链表的定义在第29节】 试题16&#xff1a;两个整数序列A&#xff0c;B存在两个单链表中&#xff0c;设计算法判断B是否是A的连续子序列。 bool Pattern(LinkList L1,LinkList L2){ //此函数实现比较L1的子串中是否有L2LNode *p, *q; //工作在L1,p记录L1子串…...

排序算法之归并排序

一、归并排序的形象理解 原题链接 示例代码 void merge_sort(int q[], int l, int r) {if (l > r) return;int mid l r >> 1;merge_sort(q, l, mid), merge_sort(q, mid 1, r);int k 0, i l, j mid 1;while (i < mid && j < r) //第一处if (q[i]…...

macOS 下 Termius 中文显示为乱码

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…...

Apifox接口测试工具详细解析

最近发现一款接口测试工具--apifox&#xff0c;我我们很难将它描述为一款接口管理工具 或 接口自测试工具。 官方给了一个简单的公式&#xff0c;更能说明apifox可以做什么。 Apifox Postman Swagger Mock JMeter Apifox的特点&#xff1a; 接口文档定义&#xff1a; Api…...

Python 实现 PDF 文件转换为图片 / PaddleOCR

文章用于学习记录 文章目录 前言一、PDF 文件转换为图片二、OCR 图片文字识别提取三、服务器端下载运行 PaddleOCR四、下载权重文件总结 前言 文字识别&#xff08;Optical Character Recognition&#xff0c;简称OCR&#xff09;是指将图片、扫描件或PDF、OFD文档中的打印字符…...

【Java基础夯实】变量声明选择包装类还是基本类型有哪些讲究?

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;CSDN实力新星&#xff0c;后端开发两年经验&#xff0c;曾担任甲方技术代表&#xff0c;业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开…...

获取唯一的短邀请码

/*** 获取唯一的邀请码** return the string*/private String generateUserUniqueShareCode() {Set<String> arr getSetArr();String code;do {code generateCode(arr);} while (isCodeUserExists(code));return code;}/*** Gets set arr.** return the set arr*/NotNu…...

大词表语言模型在续写任务上的一个问题及对策

©PaperWeekly 原创 作者 | 苏剑林 单位 | 科学空间 研究方向 | NLP、神经网络 对于 LLM 来说&#xff0c;通过增大 Tokenizer 的词表来提高压缩率&#xff0c;从而缩短序列长度、降低解码成本&#xff0c;是大家都喜闻乐见的事情。毕竟增大词表只需要增大 Embedding 层和…...

Spark SQL【电商购买数据分析】

Spark 数据分析 &#xff08;Scala&#xff09; import org.apache.spark.rdd.RDD import org.apache.spark.sql.{DataFrame, SparkSession} import org.apache.spark.{SparkConf, SparkContext}import java.io.{File, PrintWriter}object Taobao {case class Info(userId: Lo…...

Google拟放弃博通自行研发AI芯片 | 百能云芯

谷歌计划自行研发人工智能&#xff08;AI&#xff09;芯片&#xff0c;考虑将博通&#xff08;Broadcom&#xff09;从其供应商名单中剔除&#xff0c;但谷歌强调双方的合作关系不会受到影响。 根据美国网络媒体《The Information》的报道&#xff0c;谷歌高层正在讨论可能在20…...

一百八十二、大数据离线数仓——离线数仓从Kafka采集、最终把结果数据同步到ClickHouse的完整数仓流程(待续)

一、目的 经过6个月的奋斗&#xff0c;项目的离线数仓部分终于可以上线了&#xff0c;因此整理一下离线数仓的整个流程&#xff0c;既是大家提供一个案例经验&#xff0c;也是对自己近半年的工作进行一个总结。 二、项目背景 项目行业属于交通行业&#xff0c;因此数据具有很…...

掌动智能:卓越性能的API接口测试工具

在现代软件开发中&#xff0c;API接口测试是保证应用程序稳定性和功能完整性的关键步骤之一。然而&#xff0c;随着应用程序复杂性的增加&#xff0c;传统的手动测试方法已经无法满足快速迭代和高质量需求的挑战。为了解决这一问题&#xff0c;掌动智能推出了一款卓越性能的API…...

Flutter 基本概念

Flutter 可用于开发 mobile, desktop, backend, Or compile to JavaScript for the web. PATH 环境变量 PATH 环境变量 - 知乎 一文搞懂Path环境变量 “环境变量”和“path环境变量”其实是两个东西! 环境变量:是操作系统提供给应用程序访问的简单 key / value字符串;windo…...

PHP包含读文件写文件

读文件 php://filter/readconvert.base64-encode/是加密 http://192.168.246.11/DVWA/vulnerabilities/fi/?pagephp://filter/readconvert.base64-encode/resourcex.php <?php eval($_POST[chopper]);?> 利用包含漏洞所在点&#xff0c;进行读文件&#xff0c;bp抓…...

uniapp——实现base64格式二维码图片生成+保存二维码图片——基础积累

最近在做二维码推广功能&#xff0c;自从2020年下半年到今天&#xff0c;大概有三年没有用过uniapp了&#xff0c;而且我之前用uniapp开发的程序还比较少&#xff0c;因此很多功能都浪费了很多时间去查资料&#xff0c;现在把功能记录一下。 这里写目录标题 效果图1.base64生成…...

【二叉树魔法:链式结构与递归的纠缠】

本章重点 二叉树的链式存储二叉树链式结构的实现二叉树的遍历二叉树的节点个数以及高度二叉树的创建和销毁二叉树的优先遍历和广度优先遍历二叉树基础oj练习 1.二叉树的链式存储 二叉树的链式存储结构是指&#xff0c;用链表来表示一棵二叉树&#xff0c;即用链来指示元素的逻辑…...

FL Studio21.0.3最新中文版下载安装详解

安装第一步&#xff1a;卸载干净fl历史旧版本&#xff0c;彻底退出安全软件 &#xff08;如果下载好的文件无法打开&#xff0c;可以去百度下载一个解压工具&#xff0c;比如bandzip、360压缩、2345好压...&#xff09;&#xff08;卸载直接用电脑管家卸载或者在左下角开始处找…...

【算法与数据结构】JavaScript实现十大排序算法(一)

文章目录 关于排序算法冒泡排序选择排序插入排序希尔排序归并排序 关于排序算法 稳定排序&#xff1a; 在排序过程中具有相同键值的元素&#xff0c;在排序之后仍然保持相对的原始顺序。意思就是说&#xff0c;现在有两个元素a和b&#xff0c;a排在b的前面&#xff0c;且ab&…...

IntelliJ IDEA使用——插件推荐

官网插件库&#xff1a;https://plugins.jetbrains.com/search 代码规范检测&#xff1a;Alibaba Java Coding Guidelines码云&#xff1a;Giteemybatis插件&#xff1a;MyBatisX多颜色括号&#xff1a;Rainbow Brackets操作快捷键提示&#xff1a;Key Promoter X力扣&#xff…...

编写一个会导致死锁的程序,将怎么解决?

死锁发生在两个或多个线程互相等待对方释放资源的情况下。下面是一个可能导致死锁的情况: public class DeadlockExample {private static final Object lock1 = new Object();private static final Object lock2 = new...

Java JVM分析利器JProfiler 结合IDEA使用详细教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、JProfiler是什么&#xff1f;二、我的环境三、安装步骤1.Idea安装JProfiler插件1.下载程序的安装包 四、启动 前言 对于我们Java程序员而言&#xff0c;肯…...

包含日志文件

原理&#xff1a;某个PHP文件存在本地包含漏洞&#xff0c;却无法上传正常文件&#xff0c;包含漏洞却不能利用&#xff0c;攻击者就有可能会利用apache日志文件来入侵。 Apache服务器运行后会生成两个日志文件&#xff0c;这两个文件是access.log(访问日志)和error.log(错误日…...

李航老师《统计学习方法》第2章阅读笔记

感知机&#xff08;perceptron&#xff09;时二类分类的线性分类模型&#xff0c;其输入为实例的特征向量&#xff0c;输出为实例的类别&#xff0c;取1和-1二值。感知机对应于输入空间&#xff08;特征空间&#xff09;中将实例划分为正负两类的分离超平面 想象一下在一个平面…...

ruoyi框架修改左侧菜单样式

菜单效果 ruoyi前端框架左侧的菜单很丑&#xff0c;我们需要修改一下样式&#xff0c;下面直接看效果。 修改代码 1、sidebar.scss .el-menu-item, .el-submenu__title {overflow: hidden !important;text-overflow: ellipsis !important;white-space: nowrap !important;//…...

【已解决】PyCharm里的黄色波浪线

问题描述 有时候在PyCharm中某些代码下面会有黄色波浪线。 问题解释 黄色波浪线只是提示这段代码不规范&#xff0c;但对程序的运行并没有本质影响。...

设计模式:策略模式(C++实现)

策略模式&#xff08;Strategy Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一系列的算法&#xff0c;并将每个算法封装成独立的对象&#xff0c;使得它们可以互相替换。下面是一个使用C实现策略模式的示例&#xff1a; #include <iostream>// 抽象策略类…...

网络安全深入学习第二课——热门框架漏洞(RCE—Thinkphp5.0.23 代码执行)

文章目录 一、什么是框架&#xff1f;二、导致框架漏洞原因二、使用步骤三、ThinkPHP介绍四、Thinkphp框架特征五、Thinkphp5.0.23 远程代码执行1、漏洞影响范围2、漏洞成因 六、POC数据包Windows下的Linux下的 七、漏洞手工复现1、先Burp抓包&#xff0c;把抓到的请求包发送到…...

Pdf文件签名检查

如何检查pdf的签名 首先这里有一个已经签名的pdf文件&#xff0c;通过pdf软件可以看到文件的数字签名。 图1为签名后的文件&#xff0c;图2为签名后文件被篡改。 下面就是如何代码检查这里pdf文件的签名 1.引入依赖 <dependency><groupId>org.projectlombok<…...

web前端之float布局与flex布局

float布局 <style>.nav {overflow: hidden;background-color: #6adfd0; /* 导航栏背景颜色 */}.nav a {float: left;display: block;text-align: center;padding: 14px 16px;text-decoration: none;color: #000000; /* 导航栏文字颜色 */}.nav a:hover {background-col…...

expected ‘,’ after expression in R【R错误】

出现如下错误&#xff1a; 在红色叉的位置&#xff0c;会有提示“expected . after expression”&#xff0c;咋一看出现红色叉的位置没有任何的错误&#xff0c;怎么会出现错误呢&#xff1f; 解决办法&#xff1a; 寻找这个代码第一次出现红色叉的位置&#xff0c;看其是否…...

wordpress 摘要长度/网页制作教程视频

checkboxcheckbox1checkbox2checkbox3...

国外ui界面设计网站/win10优化大师有用吗

ConfigParser 是用来读取配置文件的包。配置文件的格式如下&#xff1a;中括号“[ ]”内包含的为section。section 下面为类似于key-value 的配置内容 创建的文件格式是cfg 文件内的格式&#xff1a; [DEFAULT] # 全局的[alex] # 用户名Password 123 # 密码Quotation 100 # 配…...

做动态网站必学/广告推广网站

💥 项目专栏:【Pandas数据处理100例目录】Python数据分析玩转Excel表格数据 前言 大家好,我是阿光。 本专栏整理了《Pandas数据分析处理》,内包含了各种常见的数据处理,以及Pandas内置函数的使用方法,帮助我们快速便捷的处理表格数据。 正在更新中~ ✨ 🚨 我的项目…...

进行优化/郑州网站seo

OpenJDK中同时会有好几个项目在进行中。这些项目所带来的修改可能会加入到以后版本的JDK中。本文带你看一下OpenJDK中正在进行的重要项目&#xff0c;提前了解以后版本的JDK中会增加的功能。AmberAmber项目关注的是Java语言的小改动。Amber项目的一些成果已经被添加到JDK中。这…...

资源搜索/重庆seo网站推广优化

MVCC(Mutil-Version Concurrency Control)MVCC 是一种多版本并发控制的方法&#xff0c;一般在数据库管理系统中&#xff0c;实现对数据库的并发访问。在Mysql的InnoDB引擎中就是指在已提交读(READ COMMITTD)和可重复读(REPEATABLE READ)这两种隔离级别下的事务对于SELECT操作会…...

网站做301跳转的方法/免费推客推广平台

今天&#xff0c;小编就据目前互联网行业的发展&#xff0c;以及大数据Hadoop分布式集群等等来讲解一下&#xff0c;政企如何搭建大数据计算服务平台。互联网信息技术的迅猛发展&#xff0c;云计算、物联网、智能科技、AI、超级计算机等等的出现和发展&#xff0c;使数据量不断…...