- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
【题目】
已知两个链表A和链表B分别表示两个集合,其元素递增排列。请设计一个算法用于求出A和B的交集,并存放到A链表中。
【思路分析】
1、定义两个指针a、b分别指向链表A和链表B的首元结点 和一个int类型的i变量用于记录要插入结点的位置
2、当a指向结点的data小于b指向的结点的data,a向后移动一个结点并且删除之前指向的结点
3、当a指针指向的data大于b指向的结点的data,b向后移动一个结点
4、当a指向的结点data等于b指向的结点data,就让a、b指针都向后移动一个结点并且将i++
5、如果a先指向NULL就直接退出循环,如果b先指向NULL就将a->next = NULL
【代码实现】
/**
* 求链表A和链表B的交集 并存放在链表A中
* @param A 链表A其元素递增
* @param B 链表B其元素递增
* @return
*/
Status JiaoSet(LinkList &A,LinkList B){
int i=1;
LNode* a = A->next;
LNode* b = B->next;
while (a && b){
if (a->data.no < b->data.no){
a = a->next;
ListDelete(A,i);
}else if (a->data.no > b->data.no) b=b->next;
if(a && a->data.no == b->data.no){
if (b->next == NULL){
a->next = NULL;
break;
}else{
a = a->next;
b = b->next;
}
i++;
}
}
return OK;
}
/**
* 按照位置删除结点
* @param L 链表
* @param i 要删除结点的位置
* @return
*/
Status ListDelete(LinkList &L,int i){
LinkList p = L;
int j = 0;
while (p && j<i-1){
p = p->next;
j++;
}
if(!p || j>i-1){
return ERROR;
}
LNode *q = p->next;
p->next = q->next;
delete q;
return OK;
}
【头文件及主方法】
#include <iostream>
#include <string>
#define OK 1
#define ERROR 0
using namespace std;
typedef int Status;
struct ElemType{
int no;
string name;
};
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
/*初始化*/
Status InitList(LinkList &L){
L = new LNode;
L->next = NULL;
return OK;
}
/*尾插法*/
void CreateList_R(LinkList &L, int n){
L = new LNode;
L->next = NULL;//建立带头结点的空链表
LNode *r = L;
for (int i = 0; i < n; ++i) {
LNode* p = new LNode;
cout<<"输入学号和姓名以添加结点,用空格分隔"<<endl;
cin>>p->data.no>>p->data.name;
p->next = NULL;
r->next = p;
r = p;
}
}
int main(){
LNode *L1;
LNode *L2;
InitList(L1);
InitList(L2);
CreateList_R(L1,5);
cout<<"第二条链表"<<endl;
CreateList_R(L2,3);
JiaoSet(L1,L2);
Show(L1);
}
【题目】
已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出两个集合A和B的差集(即仅有在A中出现而不在B中出现的元素构成的集合),并以同样的形式存储,同时返回该集合的元素个数。
【思路分析】
1、定义两个指针a、b分别指向链表A和链表B的首元结点 和一个int类型的i变量用于记录要插入结点的位置
2、当a指向结点的data小于b指向的结点的data,a向后移动一个结点并且i++
3、当a指针指向的data大于b指向的结点的data,b向后移动一个结点
4、当a指向的结点data等于b指向的结点data,就让a、b指针都向后移动一个结点并且删除a指针之前指向的结点
5、a或b指针只要有一个指向NULL就退出循环
【代码实现】
/**
* 求链表A和链表B的差集(A中出现而不在B中出现)
* @param A 链表A 其元素递增
* @param B 链表B 其元素递增
* @return 返回差集的链表的长度
*/
Status ChaSet(LinkList &A,LinkList B){
int i=1;
LNode* a = A->next;
LNode* b = B->next;
while (a && b){
if (a->data.no < b->data.no){
a = a->next;
i++;
}else if (a->data.no > b->data.no) b=b->next;
if (b == NULL || a == NULL) break;
if(a->data.no == b->data.no){
a = a->next;
b = b->next;
ListDelete(A,i); //ListDelete()函数实现在上一题代码中
}
}
return Length(A);
}
//求链表中元素的个数
int Length(LinkList L){
int count = 0;
LNode* p = L->next;
if (!p)
return 0;
while (p){
count++;
p = p->next;
}
return count;
}
【头文件及主方法】
#include <iostream>
#include <string>
#define OK 1
#define ERROR 0
using namespace std;
typedef int Status;
struct ElemType{
int no;
string name;
};
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
int main(){
LNode *L1;
LNode *L2;
InitList(L1);
InitList(L2);
CreateList_R(L1,5);
cout<<"第二条链表"<<endl;
CreateList_R(L2,3);
int length = ChaSet(L1,L2);
Show(L1);
cout<<endl<<"差集长度:"<<length;
}
【题目】
已知两个链表A和链表B分别表示两个集合,其元素递增排列。请设计一个算法用于求出A和B的交集,并存放到A链表中。
【代码实现】
/**
* 求A和B链表的并集 并存放在A中
* @param A 链表A 其元素递增排序
* @param B 链表B 其元素递增排序
*/
Status UnionSet(LinkList &A,LinkList B){
int i=1;
LNode* a = A->next;
LNode* b = B->next;
while (a && b){
if (a->data.no >= b->data.no){
ElemType e = {b->data.no,b->data.name};
InsertByLocation(A,i,e);
i++;
b = b->next;
}
else if (b->data.no > a->data.no) {
a = a->next;
i++;
}
}
return OK;
}
/**
* 根据位置插入结点
* @param i 插入结点的位置
* @param e 要插入的结点
*/
Status InsertByLocation(LinkList &L,int i,ElemType e){
LinkList p = L;
int j = 0;
while (p && j<i-1){
p = p->next;
j++;
}
if (!p || j>i-1)
return ERROR;
/*插入结点*/
LNode* s = new LNode;
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
我有两个关于这段代码的问题。 double*** pdata 和 int*** pmask 是什么意思?指向指针的指针?为什么或何时需要这样做? int 和 double 是不同的类型,double*
谁能用英文解释一下这是怎么回事? std::vector cats; //I get that cats is a vector of Cat objects if (std::find(cats.b
在C中,下列声明有区别吗: float DoSomething( const float arr[] ); 对比 float DoSomething( const float* arr ); 一个比另
我到 question 36我认为这很简单。像往常一样,我显然错了。我正在尝试在 Python 中执行此操作(因为我不知道 Python)。我的代码如下。我得到 19 作为输出,这显然是不正确的。我不
我已经通读了 MSDN 上的 Winsock2 文档,但如果有人能提供帮助,我仍然需要澄清一些事情。 我计划做一些类似于您在使用 WSAAsyncSelect() 时获得的设置,但使用一个单独的线程。
#include int main () { int *p = (int *)malloc((100*sizeof(int))); p++; free(p); /* do some
我想提供未知的“对象”并返回其成员之一的值。在 C# 中需要响应。 一般来说,我想我正在寻找这个方法的代码公共(public)静态对象 GetObjectMemberValue (object myO
由异常准确的 AI 提供支持的 20 个问题的简单在线游戏。 他们怎么猜得这么好? 最佳答案 您可以将其视为二进制搜索算法。在每次迭代中,我们都会提出一个问题,该问题应该会消除大约一半的可能单词选择。
拜托,有人可以解释一下吗: 如果文档说 STL std::vector finding element speed performace = O(ln(n)),这是什么意思。 O(ln(n)) - 什
我正在尝试通过遵循 Microsoft 为 ADSI API 和 Windows-RS crate 发布的 c++ 示例来使用 Rust 的事件目录。我不太明白这里发生了什么: https://doc
这是处理具有重复元素的单个列表的 nieve 案例,我在处理一些嵌套列表时遇到了麻烦,所以我想先写简单的案例。 所以我有: (defn packDuplicatesIntoLists [lis
我是新来的。我正在尝试解决此练习 Problem 18只是为了加强我的解决能力。我已经编码了答案。该任务要求“在 1,000,000 以下的质数中,有多少个数位之和等于两周中的天数?” (两周是 14
我正在尝试对POCO类中的某些字段进行索引,并将某些属性装饰为“忽略= true”,并且这些字段不应被索引,而应该被存储。我希望这些字段出现在搜索结果中,但不应作为索引。 我正在尝试对应索引的几个字段
我是编码的新手,正在尝试通过完成 Project Euler 问题来学习 Swift。我似乎有导致大量错误的不同版本的 Swift 代码。如果您对我的问题的格式有任何建议以供将来引用,请告诉我,谢谢。
对于problem statement在 google codejam 2008:第 1A 轮问题 3 In this problem, you have to find the last three
我是一名优秀的程序员,十分优秀!