数据结构OJ实验2-链表

A. DS单链表--存储结构与操作

题目描述

实现含头结点的单链表

属性包括:data数据域、next指针域

操作包括:插入、删除、查找

注意:单链表不是数组,所以位置从1开始对应首结点,头结点不放数据

输入

第1行先输入n表示有n个数据,接着输入n个数据

第2行输入要插入的位置和新数据

第3行输入要插入的位置和新数据

第4行输入要删除的位置

第5行输入要删除的位置

第6行输入要查找的位置

第7行输入要查找的位置

输出

数据之间用空格隔开,

第1行输出创建后的单链表的数据

每成功执行一次操作(插入或删除),输出执行后的单链表数据

每成功执行一次查找,输出查找到的数据

如果执行操作失败(包括插入、删除、查找等失败),输出字符串error,不必输出单链表

样例查看模式 

正常显示查看格式

输入样例1

6 11 22 33 44 55 66
3 777
1 888
1
11
0
5

输出样例1

11 22 33 44 55 66 
11 22 777 33 44 55 66 
888 11 22 777 33 44 55 66 
11 22 777 33 44 55 66 
error
error
44

AC代码

#include<iostream>
using namespace std;
struct node 
{int data;node* next;node(){data = 0;next = NULL;}
};
class linklist
{node* root;int n;
public:linklist(){cin >> n;//注意root初始!root = new node;node* t = root;for (int i = 1; i <= n; i++){int x;cin >> x;node* p = new node;p->data = x;t->next = p;t = p;//注意向后!}display();}void Insert(int idx, int d){if (idx<1 || idx>n + 1){cout << "error" << endl;return;}//idx从1开始node* q = new node;q = root;node* t = new node;t->data = d;for (int i = 1; i <idx; i++){q = q->next;}t->next = q->next;q->next = t;//不用把t删除了!n++;display();}void Delete(int idx){if (idx<1 || idx>n){cout << "error" << endl;return;}node* q = new node;q = root;for (int i = 1; i < idx; i++){q = q->next;}node* t = new node;t = q->next;q->next = t->next;delete t;n--;display();}void Find(int idx){if (idx<1 || idx>n){cout << "error" << endl;return;}node* q = new node;q = root;for (int i = 1; i <= idx; i++){q = q->next;}cout << q->data << endl;}void display(){node* q = new node;q = root;for (int i = 1; i <= n; i++){q = q->next;cout << q->data << " ";}cout << endl;}
};
int main()
{linklist l;for (int i = 0; i < 2; i++){int x, y;cin >> x >> y;l.Insert(x, y);}for (int i = 0; i < 2; i++){int x;cin >> x;l.Delete(x);}for (int i = 0; i < 2; i++){int x;cin >> x;l.Find(x);}return 0;
}

B. DS单链表--结点交换

题目描述

用C++实现含头结点的单链表,然后实现单链表的两个结点交换位置。

注意不能简单交换两个结点包含数据,必须通过修改指针来实现两个结点的位置交换

交换函数定义可以参考:

swapNode(int  pa, int pb)  //pa和pb表示两个结点在单链表的位置序号

swapNode (ListNode * p, ListNode * q)  //p和q表示指向两个结点的指针

输入

第1行先输入n表示有n个数据,接着输入n个数据

第2行输入要交换的两个结点位置

第3行输入要交换的两个结点位置

输出

第一行输出单链表创建后的所有数据,数据之间用空格隔开

第二行输出执行第1次交换操作后的单链表数据,数据之间用空格隔开

第三行输出执行第2次交换操作后的单链表数据,数据之间用空格隔开

如果发现输入位置不合法,输出字符串error,不必输出单链表

样例查看模式 

正常显示查看格式

输入样例1 

5 11 22 33 44 55
1 4
2 6

输出样例1

11 22 33 44 55 
44 22 33 11 55 
error

AC代码

#include<iostream>
using namespace std;
struct node 
{int data;node* next;node(){data = 0;next = NULL;}
};
class linklist
{node* root;int n;
public:linklist(){cin >> n;//注意root初始!root = new node;node* t = root;for (int i = 1; i <= n; i++){int x;cin >> x;node* p = new node;p->data = x;t->next = p;t = p;//注意向后!}display();}void Insert(int idx, int d){if (idx<1 || idx>n + 1){cout << "error" << endl;return;}//idx从1开始node* q = new node;q = root;node* t = new node;t->data = d;for (int i = 1; i < idx; i++){q = q->next;}t->next = q->next;q->next = t;//不用把t删除了!n++;display();}void Delete(int idx){if (idx<1 || idx>n){cout << "error" << endl;return;}node* q = new node;q = root;for (int i = 1; i < idx; i++){q = q->next;}node* t = new node;t = q->next;q->next = t->next;delete t;n--;display();}int Find(int idx){if (idx<1 || idx>n){cout << "error" << endl;return -1;}node* q = new node;q = root;for (int i = 1; i <= idx; i++){q = q->next;}return q->data;}void display(){node* q = new node;q = root;for (int i = 1; i <= n; i++){q = q->next;cout << q->data << " ";}cout << endl;}void Swap(int x, int y){if (x<1 || x>n || y < 1 || y>n){cout << "error" << endl;return;}//确保x<=y;if (x > y)swap(x, y);node* a = new node;a->data = Find(x);node* b = new node;b->data = Find(y);node* q = new node;q = root;for (int i = 1; i <= n; i++){if (i==1&&x==1){b->next = q->next->next;q->next = b;q = q->next;continue;}q = q->next;if (i == x-1){b->next = q->next->next;q->next = b;}if (i == y - 1){a->next = q->next->next;q->next = a;break;}}display();}
};
int main()
{linklist l;for (int i = 0; i < 2; i++){int x, y;cin >> x >> y;l.Swap(x, y);}return 0;
}

C. DS单链表--合并

题目描述

假定两个单链表是递增有序,定义并实现以下函数,完成两个单链表的合并,继续保持递增有序

int LL_merge(ListNode *La, ListNode *Lb)

输入

第1行先输入n表示有n个数据,接着输入n个数据

第2行先输入m表示有M个数据,接着输入m个数据

输出

输出合并后的单链表数据,数据之间用空格隔开

样例查看模式 

正常显示查看格式

输入样例1 

3 11 33 55
4 22 44 66 88

输出样例1

11 22 33 44 55 66 88 

AC代码

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct node 
{int data;node* next;node(){data = 0;next = NULL;}
};
class linklist
{node* root;int n;
public:linklist(){cin >> n;//注意root初始!root = new node;node* t = root;for (int i = 1; i <= n; i++){int x;cin >> x;node* p = new node;p->data = x;t->next = p;t = p;//注意向后!}}void Insert(int idx, int d){if (idx<1 || idx>n + 1){cout << "error" << endl;return;}//idx从1开始node* q = new node;q = root;node* t = new node;t->data = d;for (int i = 1; i < idx; i++){q = q->next;}t->next = q->next;q->next = t;//不用把t删除了!n++;display();}void Delete(int idx){if (idx<1 || idx>n){cout << "error" << endl;return;}node* q = new node;q = root;for (int i = 1; i < idx; i++){q = q->next;}node* t = new node;t = q->next;q->next = t->next;delete t;n--;display();}int Find(int idx){if (idx<1 || idx>n){cout << "error" << endl;return -1;}node* q = new node;q = root;for (int i = 1; i <= idx; i++){q = q->next;}return q->data;}void display(){node* q = new node;q = root;for (int i = 1; i <= n; i++){q = q->next;cout << q->data << " ";}cout << endl;}void Swap(int x, int y){if (x<1 || x>n || y < 1 || y>n){cout << "error" << endl;return;}//确保x<=y;if (x > y)swap(x, y);node* a = new node;a->data = Find(x);node* b = new node;b->data = Find(y);node* q = new node;q = root;for (int i = 1; i <= n; i++){if (i==1&&x==1){b->next = q->next->next;q->next = b;q = q->next;continue;}q = q->next;if (i == x-1){b->next = q->next->next;q->next = b;}if (i == y - 1){a->next = q->next->next;q->next = a;break;}}display();}friend void ll_merge(linklist x, linklist y){node* xr = x.root;node* yr = y.root;vector<int>mm;xr = xr->next;while (xr){mm.push_back(xr->data);xr = xr->next;}yr = yr->next;while (yr){mm.push_back(yr->data);yr = yr->next;}sort(mm.begin(), mm.end());for (int i = 0; i < mm.size(); i++){cout << mm[i] << " ";}cout << endl;}
};
int main()
{linklist x;linklist y;ll_merge(x, y);return 0;
}

D. DS循环链表—约瑟夫环(Ver. I - A)

题目描述

N个人坐成一个圆环(编号为1 - N),从第S个人开始报数,数到K的人出列,后面的人重新从1开始报数。问最后剩下的人的编号。

例如:N = 3,K = 2,S = 1。2号先出列,然后是1号,最后剩下的是3号。

要求使用循环链表实现。

输入

测试数据有多组

每组包括3个数N、K、S,表示有N个人,从第S个人开始,数到K出列。(2 <= N <= 10^6,1 <= K <= 10,  1 <= S <= N)

输出

出列的人的编号

样例查看模式 

正常显示查看格式

输入样例1 

13 3 1
3 2 1

输出样例1

3 6 9 12 2 7 11 4 10 5 1 8 13 
2 1 3 

AC代码

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct node
{int data;node* next;node* pre;node(){data = 0;next = NULL;pre = NULL;}
};
class circlelist
{node* root;int n, k, s;
public:circlelist(int nn, int kk, int ss){n = nn;k = kk;s = ss;//注意root初始!root = new node;root->next = root;root->pre = root;for (int i = n; i>=1;i--){node* p = new node;p->data = i;p->next = root->next;root->next->pre = p;root->next = p;p->pre = root;}root=root->next;Delete(root->pre);n++;//加入虚头结点}void Delete(node* d){d->pre->next = d->next;d->next->pre = d->pre;delete d;n--;}node* Find(int idx){node* q = root->next;if (root->data == idx){return root;}while (q != root){if (q->data == idx)return q;q = q->next;}return NULL;}void game(){node* q = Find(s);int count = 0;//记录到kwhile (q != q->next){count++;q = q->next;if (count == k){count = 0;cout << q->pre->data << " ";Delete(q->pre);}}cout << q->data << " " << endl;}
};
int main()
{int n, k, s;while (cin >> n >> k >> s){circlelist c(n, k, s);c.game();}return 0;
}

E. DS线性表—多项式相加

题目描述

对于一元多项式p(x)=p0+p1x+p2x2+…+pnxn,每个项都有系数和指数两部分,例如p2x2的系数为p2,指数为2。

编程实现两个多项式的相加。

例如5+x+2x2+3x3,-5-x+6x2+4x4,两者相加结果:8x2+3x3+4x4

其中系数5和-5都是x的0次方的系数,相加后为0,所以不显示。x的1次方同理不显示。

要求用单链表实现。

输入

第1行:输入t表示有t组测试数据

第2行:输入n表示有第1组的第1个多项式包含n个项

第3行:输入第一项的系数和指数,以此类推输入n行

接着输入m表示第1组的第2个多项式包含m项

同理输入第2个多项式的m个项的系数和指数

参考上面输入第2组数据,以此类推输入t组

假设所有数据都是整数

输出

对于每1组数据,先用两行输出两个原来的多项式,再用一行输出运算结果,不必考虑结果全为0的情况

输出格式参考样本数据,格式要求包括:

1.如果指数或系数是负数,用小括号括起来。

2.如果系数为0,则该项不用输出。

3.如果指数不为0,则用符号^表示,例如x的3次方,表示为x^3。

4.多项式的每个项之间用符号+连接,每个+两边加1个空格隔开。

样例查看模式 

正常显示查看格式

输入样例1 

2
4
5 0
1 1
2 2
3 3
4
-5 0
-1 1
6 2
4 4
3
-3 0
-5 1
2 2
4
9 -1
2 0
3 1
-2 2

输出样例1

5 + 1x^1 + 2x^2 + 3x^3
(-5) + (-1)x^1 + 6x^2 + 4x^4
8x^2 + 3x^3 + 4x^4
(-3) + (-5)x^1 + 2x^2
9x^(-1) + 2 + 3x^1 + (-2)x^2
9x^(-1) + (-1) + (-2)x^1


AC代码

#include<bits/stdc++.h>
using namespace std;
class node
{
public:int xishu;int zhishu;node* next;node(int a = 0, int b = 0, node* c = NULL){xishu = a;zhishu = b;next = c;}
};
class linknode
{node* head;int len;
public:linknode(){head = new node;len = 0;}linknode(int n){len = n;head = new node;node* q = head;//尾指针for (int i = 1; i <= n; i++){int a, b;cin >> a >> b;node* p = new node(a, b);p->next = q->next;q->next = p;q = q->next;}}//尾插法void linkinsert(node* s){node* p = head;while (p->next != NULL){p = p->next;}//p(最后一个)  p->next=NULLnode* pp = new node;*pp = *s;pp->next = p->next;p->next = pp;len++;}friend linknode operator +(linknode& la, linknode& lb){linknode l;node* p = la.head->next;node* q = lb.head->next;while (p && q){if (p->zhishu == q->zhishu){int tt = q->xishu + p->xishu;if (tt){node* s = new node(tt, p->zhishu);l.linkinsert(s);//尾部插入}p = p->next;q = q->next;}else if (p->zhishu < q->zhishu){l.linkinsert(p);p = p->next;}else{l.linkinsert(q);q = q->next;}}while (p){l.linkinsert(p);p = p->next;}while (q){l.linkinsert(q);q = q->next;}return l;}void display(){node* p = head->next;while (p){if (p->xishu < 0){cout << "(" << p->xishu << ")";}else{cout << p->xishu;}if (p->zhishu > 0){cout << "x^" << p->zhishu;}else if (p->zhishu < 0){cout << "x^(" << p->zhishu << ")";}p = p->next;if (p != NULL)cout << " + ";}cout << endl;}
};
int main()
{int t;cin >> t;while (t--){int n;cin >> n;linknode q1(n);q1.display();cin >> n;linknode q2(n);q2.display();(q1 + q2).display();}return 0;
}

F. DS链表—学生宿舍管理(双向列表容器List)

题目描述

假设某校有20间宿舍,宿舍编号101,102,...,120。每间只住一名学生。初始部分宿舍已用。用两个链表(已用宿舍链表和可用宿舍链表)维护宿舍的管理,实现宿舍分配、宿舍交回。

约定已用宿舍链表按宿舍号升序链接。初始可用宿舍链表也按宿舍号升序链接。

宿舍分配从可用宿舍链表中摘取第一间宿舍分配给学生。学生交回的宿舍挂在可用宿舍链表最后。

备注:使用list容器或静态链表。不用考虑宿舍分配和交回不成功的情况。

输入

初始宿舍状态,第一行输入n,表示已用宿舍n间

后跟n行数据,每行格式为:学生姓名 宿舍号 

操作次数m,后跟m行操作,操作格式如下:

assign 学生  //为学生分配宿舍,从可用宿舍链表头摘取一间宿舍,

//按宿舍号升序挂在已用宿舍链表中。

return  宿舍号   //学生退宿舍,删除已用宿舍链表中对应结点,

//挂在可用宿舍链表尾部。

display_free   //输出可用宿舍链表信息。

display_used   //输出已用宿舍链表信息。

输出

display_free依次输出当前可用宿舍链表中的宿舍号,具体格式见样例。

display_used依次输出当前已用宿舍链表中的宿舍号,具体格式见样例。

样例查看模式 

正常显示查看格式

输入样例1 

5
李明  103
张三  106
王五  107
钱伟  112
章立  118
8
assign 李四
assign 赵六
return 118
return 101
assign 马山
display_used
assign 林立
display_free

输出样例1

赵六(102)-李明(103)-马山(104)-张三(106)-王五(107)-钱伟(112)
108-109-110-111-113-114-115-116-117-119-120-118-101

AC代码

#include<bits/stdc++.h>
using namespace std;
int st[200];
struct kenode
{string name;int num;kenode* next;kenode(string s = "", int a = 0, kenode* c = NULL){name = s;num = a;next = c;}
};
struct yinode
{int data;yinode* next;yinode(int a = 0, yinode* b = NULL){data = a;next = b;}
};
class llink
{int kelen;int yilen;kenode* kehead;yinode* yihead;
public:llink(int n){kelen = n;kehead = new kenode;kenode* q = kehead;for (int i = 0; i < kelen; i++){string ss;int a;cin >> ss >> a;kenode* p = new kenode(ss, a);st[a] = 1;p->next = q->next;q->next = p;q = q->next;}yihead = new yinode;yinode* qq = yihead;yilen = 20 - kelen;for (int i = 101; i <= 120; i++){if (st[i] == 0){yinode* pp = new yinode(i);pp->next = qq->next;qq->next = pp;qq = qq->next;}}}int deleteyinode(){yinode* p = yihead->next;yihead->next = p->next;yilen--;return p->data;}void addkenode(kenode* d){kenode* p = kehead->next;kenode* s = new kenode;*s = *d;while (p != NULL){if (p->num < s->num && (p->next->num > s->num || p->next == NULL)){s->next = p->next;p->next = s;kelen++;return;}p = p->next;}p = kehead;d->next = p->next;p->next = d;kelen++;}void addyinode(int n){yinode* p = yihead;while (p->next != NULL){p = p->next;}yinode* pp = new yinode(n);pp->next = p->next;p->next = pp;yilen++;}void shifan(int n){kenode* p = kehead;while (p != NULL){if (p->next->num == n){addyinode(n);p->next = p->next->next;kelen--;break;}p = p->next;}}void display_used(){kenode* p = kehead->next;while (p->next){cout << p->name << "(" << p->num << ")-";p = p->next;}cout << p->name << "(" << p->num << ")" << endl;}void display_free(){yinode* pp = yihead->next;while (pp->next){cout << pp->data << "-";pp = pp->next;}cout << pp->data << endl;}void assign(string nn){kenode* p = new kenode(nn, deleteyinode());addkenode(p);}
};
int main()
{int nn;cin >> nn;llink ll(nn);int m;cin >> m;while (m--){string ss;cin >> ss;string nn;if (ss == "display_used"){ll.display_used();}else if (ss == "display_free"){ll.display_free();}else if (ss == "assign"){cin >> nn;ll.assign(nn);}else if (ss == "return"){int aa;cin >> aa;ll.shifan(aa);}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/590641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

听GPT 讲Rust源代码--library/portable-simd

File: rust/library/portable-simd/crates/core_simd/examples/spectral_norm.rs spectral_norm.rs是一个示例程序&#xff0c;它展示了如何使用Portable SIMD库中的SIMD&#xff08;Single Instruction Multiple Data&#xff09;功能来实现频谱规范化算法。该示例程序是Rust源…

跟着cherno手搓游戏引擎【2】:日志系统spdlog和premake的使用

配置&#xff1a; 日志库文件github&#xff1a; GitHub - gabime/spdlog: Fast C logging library. 新建vendor文件夹 将下载好的spdlog放入 配置YOTOEngine的附加包含目录&#xff1a; 配置Sandbox的附加包含目录&#xff1a; 包装spdlog&#xff1a; 在YOTO文件夹下创建…

在Django中配置PostgreSQL

下载并安装PostgreSQL PostgreSQL: Downloads 安装依赖psycopg2 python -m pip install psycopg2 修改Django配置文件settings.py &#x1f4cc;编辑 mysite/settings.py 文件前&#xff0c;先设置 TIME_ZONE 为你自己时区。 LANGUAGE_CODE zh-Hans TIME_ZONE Asia/Shang…

【Elasticsearch源码】 分片恢复分析

带着疑问学源码&#xff0c;第七篇&#xff1a;Elasticsearch 分片恢复分析 代码分析基于&#xff1a;https://github.com/jiankunking/elasticsearch Elasticsearch 8.0.0-SNAPSHOT 目的 在看源码之前先梳理一下&#xff0c;自己对于分片恢复的疑问点&#xff1a; 网上对于E…

【基础】【Python网络爬虫】【12.App抓包】reqable 安装与配置(附大量案例代码)(建议收藏)

Python网络爬虫基础 App抓包1. App爬虫原理2. reqable 的安装与配置reqable 安装教程reqable 的配置 3. 模拟器的安装与配置夜神模拟器的安装夜神模拟器的配置配置代理配置证书 4. 内联调试及注意事项软件启动顺开启抓包功reqable面板功列表部件功能列表数据快捷操作栏 夜神模拟…

【ASP.NET Core 基础知识】--目录

介绍 1.1 什么是ASP.NET Core1.2 ASP.NET Core的优势1.3 ASP.NET Core的版本历史 环境设置 2.1 安装和配置.NET Core SDK2.2 使用IDE&#xff08;Integrated Development Environment&#xff09;&#xff1a;Visual Studio Code / Visual Studio 项目结构 3.1 ASP.NET Core项…

WPF+Halcon 培训项目实战 完结(13):HS 鼠标绘制图形

文章目录 前言相关链接项目专栏运行环境匹配图片矩形鼠标绘制Halcon添加右键事件Task封装运行结果个人引用问题原因推测 圆形鼠标绘制代码运行结果 课程完结&#xff1a; 前言 为了更好地去学习WPFHalcon&#xff0c;我决定去报个班学一下。原因无非是想换个工作。相关的教学视…

洛谷基础题

输出保留 3 位小数的浮点数 题目描述 读入一个单精度浮点数&#xff0c;保留 3 3 3 位小数输出这个浮点数。 提示&#xff1a;就这题来说&#xff0c;请使用 float 类型的单精度浮点数。 输入格式 只有一行&#xff0c;一个单精度浮点数。 输出格式 也只有一行&#xf…

【java爬虫】股票数据获取工具前后端代码

前面我们有好多文章都是在介绍股票数据获取工具&#xff0c;这是一个前后端分离项目 后端技术栈&#xff1a;springboot&#xff0c;sqlite&#xff0c;jdbcTemplate&#xff0c;okhttp 前端技术栈&#xff1a;vue&#xff0c;element-plus&#xff0c;echarts&#xff0c;ax…

K8s实战入门

1.NameSpace Namespace是kubernetes系统中的一种非常重要资源&#xff0c;它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。 默认情况下&#xff0c;kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中&#xff0c;可能不想让两个Pod之间进行互相…

MFC - CArchive/内存之间的序列化应用细节

文章目录 MFC - CArchive/内存之间的序列化应用细节概述笔记END MFC - CArchive/内存之间的序列化应用细节 概述 有个参数文件, 开始直接序列化到文件. 现在优化程序, 不想这个参数文件被用户看到. 想先由参数发布程序(自己用)设置好参数后, 加个密落地. 等用户拿到后, 由程序…

机器学习笔记 - 什么是匈牙利算法?有什么用处?

一、什么是匈牙利算法? 匈牙利算法是一种优化算法,可以在多项式时间内解决分配问题。该算法也被称为Kuhn-Munkres 算法或Munkres 分配算法。 匈牙利算法由以下四个步骤组成。 前两个步骤执行一次,而步骤 3 和 4 则重复执行,直到找到最佳分配。该算法的输入是一个仅包含非负…

layui的表单中的一些常见的标签的含义,含在线实战。

表单提交&#xff1a; lay-submit和lay-filter组合使用实现表单的提交,注意这个必须有两个&#xff0c;不然实现不了表单的提交喔&#xff0c;例如 <button class"layui-btn layui-btn-normal" lay-filter"login_button" lay-submit"">登…

在线智能防雷监控检测系统应用方案

在线智能防雷监控检测系统是一种利用现代信息技术&#xff0c;对防雷设施的运行状态进行实时监测、管理和控制的系统&#xff0c;它可以有效提高防雷保护的安全性、可靠性和智能化程度&#xff0c;降低运维成本和风险&#xff0c;为用户提供全方位的防雷解决方案。 地凯科技在…

什么是数据标注

数据标注&#xff08;Data Annotation&#xff09;是指将原始数据中的特定信息或标签添加到数据样本中的过程。这些标签通常是人类专家或者自动化工具根据特定任务或问题的需求来添加的。数据标注的目的是为了让机器学习算法能够理解和利用数据&#xff0c;从而进行模型训练、预…

排序算法之计数排序

计数排序是一种非基于比较的排序算法&#xff0c;它通过统计数组中每个元素出现的次数&#xff0c;将其按次数从小到大排序。 以下是计数排序的基本步骤&#xff1a; 统计&#xff1a;统计数组中每个元素出现的次数。计数&#xff1a;将每个元素的出现次数存储在另一个数组中…

redisson作为分布式锁的底层实现

1. redisson如何实现尝试获取锁的逻辑 如何实现在一段的时间内不断的尝试获取锁 其实就是搞了个while循环&#xff0c;不断的去尝试获取锁资源。但是因为latch的存在会在给定的时间内处于休眠状态。这个事件&#xff0c;监听的是解锁动作&#xff0c;如果解锁动作发生。会调用…

Android textview展示富文本内容

今天实现的内容&#xff0c;就是上图的效果&#xff0c;通过Span方式展示图片&#xff0c;需要支持文字颜色改变、加粗。支持style\"color:green; font-weight:bold;\"展示。尤其style标签中的font-size、font-weight是在原生中不被支持的。 所以我们今天需要使用自…

病情聊天机器人,利用Neo4j图数据库和Elasticsearch全文搜索引擎相结合

项目设计目的&#xff1a; 本项目旨在开发一个病情聊天机器人&#xff0c;利用Neo4j图数据库和Elasticsearch全文搜索引擎相结合&#xff0c;实现对病情相关数据的存储、查询和自动回答。通过与用户的交互&#xff0c;机器人可以根据用户提供的症状描述&#xff0c;给出初步的可…

字母简化(UPC练习)

题目描述 给出一串全部为小写英文字母的字符串&#xff0c;要求把这串字母简化。简化规则是&#xff1a;统计连续出现的字母数&#xff0c;输出时先输出个数&#xff0c;再输出字母。比如&#xff1a;aaabbbaa&#xff0c;则简化为3a3b2a&#xff1b;而zzzzeeeeea&#xff0c;…