严蔚敏数据结构p17(2.19)——p18(2.24) (c语言代码实现)

目录

2.19已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试写一高效的算法,删除表中所有值大于 mink 且小于 maxk 的元素(若表中存在这样的元素)同时释放被删结点空间,并分析你的算法的时间复杂度(注意:mink 和 maxk 是给定的个参变量,它们的值可以和表中的元素相同,也可以不同)。

2.20 同 2.19 题条件,试写一高效的算法,删除表中所有值相同的多余元素(得操作后的线性表中所有元素的值均不相同),同时释放被删结点空间,并分析你的算法的时间复杂度。

2.21 试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表(a1,a2,...,an)逆置为(an,...,a2,a1)。可以看下面这个(说的不好请见谅)👇

2.22试写一算法,对单链表实现就地逆置(可以看下面的视频讲解)👇

 2.23 题目截图了

 2.24假设有两个按元素值递增有序排列的线性表A和B均以单链表作存储结构,请编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许表中含有值相同的元素)排列的线性表 C,并要求利用原表(即A表和B 表)的结点空间构造C表。


2.19已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试写一高效的算法,
删除表中所有值大于 mink 且小于 maxk 的元素(若表中存在这样的元素)同时释放被删结点空间,
并分析你的算法的时间复杂度(注意:mink 和 maxk 是给定的个参变量,它们的值可以和表中的元素相同,也可以不同)。

本题代码如下

void deletemidst(linklist* L, int mink, int maxk)
{
    lnode* p = (*L)->next, * pre = *L; // 定义指针p和pre分别指向链表头结点的下一个结点和链表头结点
    lnode* q; // 定义指针q用于释放临时结点
    while (p) // 遍历链表
    {
        if (p->data > mink && p->data < maxk) // 如果当前结点的值在指定范围内
        {
            q = p; // 将当前结点赋值给临时结点q
            p = p->next; // 将指针p指向下一个结点
            pre->next = p; // 将指针pre的next指针指向下一个结点
            free(q); // 释放临时结点q所占用的内存空间
        }
        else // 如果当前结点的值不在指定范围内
        {
            p = p->next; // 将指针p指向下一个结点
            pre = pre->next; // 将指针pre指向下一个结点
        }
    }
}

完整测试代码如下

#include<stdio.h>
#include<stdlib.h>
typedef struct lnode
{
    int data; // 数据域,存储整数值
    struct lnode* next; // 指针域,指向下一个节点
}lnode, * linklist; // 定义链表结构体和指针类型
int a[8] = { 1,2,3,4,5,6,7,8 }; // 初始化数组a
int n = 8; // 数组a的长度
// 构建链表函数
void buildlinklist(linklist* L)
{
    *L = (lnode*)malloc(sizeof(lnode)); // 分配内存空间给链表头结点
    (*L)->next = NULL; // 初始化链表头结点的next指针为NULL
    lnode* s, * r = *L; // 定义临时结点s和当前结点r
    int i = 0;
    for (i = 0; i < n; i++) // 遍历数组a
    {
        s = (lnode*)malloc(sizeof(lnode)); // 分配内存空间给临时结点s
        s->data = a[i]; // 将数组a中的元素赋值给临时结点s的data域
        s->next = r->next; // 将当前结点的next指针指向临时结点的next指针所指向的结点
        r->next = s; // 将当前结点的next指针指向临时结点s
        r = s; // 更新当前结点r为临时结点s
    }
    r->next = NULL; // 将最后一个结点的next指针设为NULL
}
// 删除指定范围内的值函数
void deletemidst(linklist* L, int mink, int maxk)
{
    lnode* p = (*L)->next, * pre = *L; // 定义指针p和pre分别指向链表头结点的下一个结点和链表头结点
    lnode* q; // 定义指针q用于释放临时结点
    while (p) // 遍历链表
    {
        if (p->data > mink && p->data < maxk) // 如果当前结点的值在指定范围内
        {
            q = p; // 将当前结点赋值给临时结点q
            p = p->next; // 将指针p指向下一个结点
            pre->next = p; // 将指针pre的next指针指向下一个结点
            free(q); // 释放临时结点q所占用的内存空间
        }
        else // 如果当前结点的值不在指定范围内
        {
            p = p->next; // 将指针p指向下一个结点
            pre = pre->next; // 将指针pre指向下一个结点
        }
    }
}
// 打印链表函数
void print(linklist* L)
{
    lnode* k = (*L)->next; // 定义指针k指向链表头结点的下一个结点
    while (k) // 遍历链表
    {
        printf("%d ", k->data); // 输出当前结点的值
        k = k->next; // 将指针k指向下一个结点
    }
}

int main()
{
    linklist L; // 定义链表L
    buildlinklist(&L); // 调用构建链表函数
    printf("原始单链表为:"); // 输出提示信息
    print(&L); // 调用打印链表函数
    printf("删除mink与maxk中间的值后的单链表为:"); // 输出提示信息
    deletemidst(&L, 2, 6); // 调用删除指定范围内的值函数
    print(&L); // 调用打印链表函数
    return 0; // 返回0表示程序正常结束
}

测试结果为

2.20 同 2.19 题条件,试写一高效的算法,删除表中所有值相同的多余元素(得操作后的线性表中所有元素的值均不相同),同时释放被删结点空间,并分析你的算法的时间复杂度。

本题代码如下

void deleterepeat(linklist* L)
{
	lnode* p = (*L)->next, * pre = *L;//p为工作指针,pre为它的前驱指针防止断链
	lnode* q;
	while (p->next!=NULL)
	{
		if (p->next->data == pre->next->data)//如果p的后继的值域等与它本身则执行删除操作
		{
			q = p;
			p = p->next;
			pre->next = p;
			free(q);
		}
		else//否则继续向后遍历
		{
			p = p->next;
			pre = pre->next;
		}
	}
}void deleterepeat(linklist* L)
{
	lnode* p = (*L)->next, * pre = *L;//p为工作指针,pre为它的前驱指针防止断链
	lnode* q;
	while (p->next!=NULL)
	{
		if (p->next->data == pre->next->data)//如果p的后继的值域等与它本身则执行删除操作
		{
			q = p;
			p = p->next;
			pre->next = p;
			free(q);
		}
		else//否则继续向后遍历
		{
			p = p->next;
			pre = pre->next;
		}
	}
}

完整测试代码

#include<stdio.h>
#include<stdlib.h>
typedef struct lnode
{
	int data;
	struct lnode* next;
}lnode,*linklist;
int a[8] = { 1,2,2,3,3,4,5,6 };
int n = 8;
void buildlinklist(linklist* L)
{
	*L = (lnode*)malloc(sizeof(lnode));
	(*L)->next = NULL;
	int i = 0;
	lnode* s, * r = *L;
	for (i = 0; i < n; i++)
	{
		s = (lnode*)malloc(sizeof(lnode));
		s->data = a[i];
		s->next = r->next;
		r->next = s;
		r = s;
	}
	r->next = NULL;
}
void deleterepeat(linklist* L)
{
	lnode* p = (*L)->next, * pre = *L;//p为工作指针,pre为它的前驱指针防止断链
	lnode* q;
	while (p->next!=NULL)
	{
		if (p->next->data == pre->next->data)//如果p的后继的值域等与它本身则执行删除操作
		{
			q = p;
			p = p->next;
			pre->next = p;
			free(q);
		}
		else//否则继续向后遍历
		{
			p = p->next;
			pre = pre->next;
		}
	}
}
void print(linklist* L)
{
	lnode* k = (*L)->next;
	while (k)
	{
		printf("%d ", k->data);
		k = k->next;
	}
}
int main()
{
	linklist L;
	buildlinklist(&L);
	printf("原始单链表为:"); 
    print(&L); // 调用打印链表函数
    printf("\n删除重复值后的单链表为:");
    deleterepeat(&L); // 调用删除重复值的函数
    print(&L); // 调用打印链表函数
    return 0; // 返回0表示程序正常结束
}

测试结果为

2.21 试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表(a1,a2,...,an)逆置为(an,...,a2,a1)。可以看下面这个(说的不好请见谅)👇

c语言代码实现数据结构课后代码题顺序表p18 2_哔哩哔哩_bilibili

本题代码如下

void nizhi(struct sqlist *s)
{
	int i = 0; // 定义一个整型变量i,用于遍历顺序表
	int j = s->length; // 定义一个整型变量j,用于存储顺序表的长度
	int temp = 0; // 定义一个整型变量temp,用于临时存储元素
	for (i = 0; i < s->length / 2; i++) // 遍历顺序表的前半部分
	{
		temp = s->a[i]; // 将当前元素存储到temp中
		s->a[i] = s->a[s->length - 1 - i]; // 将后半部分的元素赋值给前半部分
		s->a[s->length - 1 - i] = temp; // 将temp中的元素赋值给后半部分
	}
}

完整测试代码如下

#include<stdio.h>
#define Max 10
struct sqlist
{
	int a[Max];
	int length;
};
void nizhi(struct sqlist *s)
{
	int i = 0; // 定义一个整型变量i,用于遍历顺序表
	int j = s->length; // 定义一个整型变量j,用于存储顺序表的长度
	int temp = 0; // 定义一个整型变量temp,用于临时存储元素
	for (i = 0; i < s->length / 2; i++) // 遍历顺序表的前半部分
	{
		temp = s->a[i]; // 将当前元素存储到temp中
		s->a[i] = s->a[s->length - 1 - i]; // 将后半部分的元素赋值给前半部分
		s->a[s->length - 1 - i] = temp; // 将temp中的元素赋值给后半部分
	}
}
int main()
{
	struct sqlist s; // 定义两个顺序表变量s
	int i = 0; // 定义一个整型变量,用于遍历顺序表s
	s.length = 5; // 设置顺序表s的长度为5
	for (i = 0; i < s.length; i++) // 遍历交集结果
		scanf("%d", &s.a[i]);
	printf("原顺序表为:");
	for (i = 0; i < s.length; i++) // 遍历交集结果
		printf("%d ", s.a[i]); // 输出交集结果中的每个元素
	nizhi(&s);
	printf("\n逆置后的顺序表为:");
	for (i = 0; i < s.length; i++) // 遍历交集结果
		printf("%d ", s.a[i]); // 输出交集结果中的每个元素
	return 0; // 程序正常结束,返回0
}

测试结果为

2.22试写一算法,对单链表实现就地逆置(可以看下面的视频讲解)👇

c语言代码实现数据结构课后代码题顺序表p18 2_哔哩哔哩_bilibili

 本题代码如下

void nizhi(linklist* L)//单链表就地逆置
{
	lnode* p = (*L)->next;
	lnode* r = p;
	(*L)->next = NULL;
	while (p != NULL)
	{
		p = p->next;
		r->next = (*L)->next;
		(*L)->next = r;
		r = p;
	}
}

完整测试代码如下

#include<stdio.h>
#define Max 50
struct sqlist
{
	int a[Max];
	int length;
};
void nizhi(struct sqlist* s)
{
	int temp = 0;
	for (int i = 0; i < s->length / 2; i++)
	{
		temp = s->a[i];
		s->a[i] = s->a[s->length - i - 1];
		s->a[s->length - 1 - i] = temp;
	}
}
int main()
{
	struct sqlist s;
	int j = 0;
	s.length = 5;
	for (j = 0; j < s.length; j++)
		scanf("%d", &s.a[j]);
	printf("原先数组为:");
	for (j = 0; j < s.length; j++)
		printf("%d", s.a[j]);
	nizhi(&s);
	printf("\n逆置后的数组为:");
	for (j = 0; j < s.length; j++)
		printf("%d", s.a[j]);
	return 0;
}

测试结果为 

 

 2.23

本题代码如下

linklist Union(linklist* A, linklist* B)
{
	lnode *C = (lnode*)malloc(sizeof(lnode));
	C->next = NULL;
	lnode* ra = (*A)->next, * rb = (*B)->next;
	lnode* rc = C;
	while (ra && rb)
	{
		if (ra->data<rb->data)//若A中当前结点小于B中当前结点值
		{
			rc->next = ra;
			rc = ra;
			ra = ra->next;
		}
		else if (ra->data>rb->data)//若A中当前结点大于B中当前结点值
		{
			rc->next = rb;
			rc = rb;
			rb = rb->next;
		}
		else
		{
			rc->next = ra;
			rc = ra;
			ra = ra->next;
			rb= rb->next;
		}
	}
	while (ra)//B遍历完,A没有遍历完
	{
		rc->next= ra;
		rc = ra;
		ra = ra->next;
	}
	while (rb)//A遍历完,B没有遍历完
	{
		rc->next = rb;
		rc = rb;
		rb= rb->next;
	}
	rc->next = NULL; //结果表的表尾结点置空
	return C;
}

完整测试代码如下

#include<stdio.h>
#include<stdlib.h>
typedef struct lnode
{
	int data;
	struct lnode* next;
}lnode, * linklist;
int na = 5;
int nb = 3;
int a[5] = { 1,3,5,7,9};
int b[3] = { 2,4,6 };
void buildlinklist(linklist* L, int arr[], int n)//创建链表
{
	*L = (lnode*)malloc(sizeof(lnode));
	(*L)->next = NULL;
	lnode* s = *L, * r = *L;
	int i = 0;
	for (i = 0; i < n; i++)
	{
		s = (lnode*)malloc(sizeof(lnode));
		s->data = arr[i];
		s->next = r->next;
		r->next = s;
		r = s;
	}
	r->next = NULL;
}
linklist Union(linklist* A, linklist* B)
{
	lnode *C = (lnode*)malloc(sizeof(lnode));
	C->next = NULL;
	lnode* ra = (*A)->next, * rb = (*B)->next;
	lnode* rc = C;
	while (ra && rb)
	{
		if (ra->data<rb->data)//若A中当前结点小于B中当前结点值
		{
			rc->next = ra;
			rc = ra;
			ra = ra->next;
		}
		else if (ra->data>rb->data)//若A中当前结点大于B中当前结点值
		{
			rc->next = rb;
			rc = rb;
			rb = rb->next;
		}
		else
		{
			rc->next = ra;
			rc = ra;
			ra = ra->next;
			rb= rb->next;
		}
	}
	while (ra)//B遍历完,A没有遍历完
	{
		rc->next= ra;
		rc = ra;
		ra = ra->next;
	}
	while (rb)//A遍历完,B没有遍历完
	{
		rc->next = rb;
		rc = rb;
		rb= rb->next;
	}
	rc->next = NULL; //结果表的表尾结点置空
	return C;
}
void print(linklist* L)//输出单链表
{
	lnode* k = (*L)->next;
	while (k)
	{
		printf("%d ", k->data);
		k = k->next;
	}
}
int main()
{
	linklist A, B;
	buildlinklist(&A, a, na);
	buildlinklist(&B, b, nb);
	printf("A链表为:");
	print(&A);
	printf("\nB链表为:");
	print(&B);
	linklist C = Union(&A, &B);
	printf("\n合并后的链表为:");
	print(&C);
	return 0;
}

 测试结果如下

 

 2.24假设有两个按元素值递增有序排列的线性表A和B均以单链表作存储结构,请编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许表中含有值相同的元素)排列的线性表 C,并要求利用原表(即A表和B 表)的结点空间构造C表。

本题代码如下

linklist Union(linklist* A, linklist* B)
{
	lnode* C = (lnode*)malloc(sizeof(lnode));
	C->next = NULL;
	lnode* ra = (*A)->next, * rb = (*B)->next;
	lnode* rapre = *A, * rbpre = *B;//rapre为ra的前驱指针,rbpre为rb的前去指针 
	lnode* rc = C;
	while (ra && rb)
	{
		if (ra->data < rb->data)//若A中当前结点小于B中当前结点值
		{
			rapre = ra->next;
			ra->next=rc->next ;
			rc->next= ra;
			ra =rapre;
		}
		else if (ra->data > rb->data)//若A中当前结点大于B中当前结点值
		{
			rbpre = rb->next;
			rb->next = rc->next;
			rc->next = rb;
			rb = rbpre;
		}
		else
		{
			rapre = ra->next;
			ra->next = rc->next;
			rc->next = ra;
			ra = rapre;
			rb = rb->next;
		}
	}
	while (ra)//B遍历完,A没有遍历完
	{
		rapre = ra->next;
		ra->next = rc->next;
		rc->next = ra;
		ra = rapre;
	}
	while (rb)//A遍历完,B没有遍历完
	{
		rbpre = rb->next;
		rb->next = rc->next;
		rc->next = rb;
		rb = rbpre;
	}
	return C;
}

完整测试代码如下

#include<stdio.h>
#include<stdlib.h>
typedef struct lnode
{
	int data;
	struct lnode* next;
}lnode, * linklist;
int na = 5;
int nb = 8;
int a[5] = { 1,3,5,7,9 };
int b[8] = { 2,4,6,8,10,12,14,16 };
void buildlinklist(linklist* L, int arr[], int n)//创建链表
{
	*L = (lnode*)malloc(sizeof(lnode));
	(*L)->next = NULL;
	lnode* s = *L, * r = *L;
	int i = 0;
	for (i = 0; i < n; i++)
	{
		s = (lnode*)malloc(sizeof(lnode));
		s->data = arr[i];
		s->next = r->next;
		r->next = s;
		r = s;
	}
	r->next = NULL;
}
linklist Union(linklist* A, linklist* B)
{
	lnode* C = (lnode*)malloc(sizeof(lnode));
	C->next = NULL;
	lnode* ra = (*A)->next, * rb = (*B)->next;
	lnode* rapre = *A, * rbpre = *B;//rapre为ra的前驱指针,rbpre为rb的前去指针 
	lnode* rc = C;
	while (ra && rb)
	{
		if (ra->data < rb->data)//若A中当前结点小于B中当前结点值
		{
			rapre = ra->next;
			ra->next=rc->next ;
			rc->next= ra;
			ra =rapre;
		}
		else if (ra->data > rb->data)//若A中当前结点大于B中当前结点值
		{
			rbpre = rb->next;
			rb->next = rc->next;
			rc->next = rb;
			rb = rbpre;
		}
		else
		{
			rapre = ra->next;
			ra->next = rc->next;
			rc->next = ra;
			ra = rapre;
			rb = rb->next;
		}
	}
	while (ra)//B遍历完,A没有遍历完
	{
		rapre = ra->next;
		ra->next = rc->next;
		rc->next = ra;
		ra = rapre;
	}
	while (rb)//A遍历完,B没有遍历完
	{
		rbpre = rb->next;
		rb->next = rc->next;
		rc->next = rb;
		rb = rbpre;
	}
	return C;
}
void print(linklist* L)//输出单链表
{
	lnode* k = (*L)->next;
	while (k)
	{
		printf("%d ", k->data);
		k = k->next;
	}
}
int main()
{
	linklist A, B;
	buildlinklist(&A, a, na);
	buildlinklist(&B, b, nb);
	printf("A链表为:");
	print(&A);
	printf("\nB链表为:");
	print(&B);
	linklist C = Union(&A, &B);
	printf("\n合并后的链表为:");
	print(&C);
	return 0;
}

测试结果如下

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE】生产者消费者模式

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

从零开始学习 JS APL(一):完整指南和实例解析

本章内容主要是按一下来&#xff1a; 操作DOM BOM 比如 控制网页元 素交互等各种网页 交互效果 以下是我总结笔记&#xff08;仅供参考&#xff09; webAPL 获取DOM对象 变量声明有三个 var let 和 const 我们应该用那个呢&#xff1f; 首先var 先排除&#xff0c;老派写法…

UDP协议实现群聊

代码&#xff1a; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.*; import java.io.IOException; import java.lang.String; public class liaotian extends JFrame{ private static final int DEFAULT_PORT8899; private J…

机器的深度强化学习算法可以被诱导

设计一个好的奖励函数是机器深度强化学习算法的关键之一。奖励函数用于给予智能体&#xff08;机器&#xff09;在环境中采取不同行动时的反馈信号&#xff0c;以指导其学习过程。一个好的奖励函数应该能够引导智能体朝着期望的行为方向学习&#xff0c;并尽量避免潜在的问题&a…

使用ASIRequest库进行Objective-C网络爬虫示例

在Objective-C中&#xff0c;ASIHTTPRequest是一个非常受欢迎的库&#xff0c;用于处理HTTP请求。它可用于下载网页内容&#xff0c;处理API请求&#xff0c;甚至进行复杂的网络交互。下面是一个简单的示例&#xff0c;展示了如何使用ASIHTTPRequest库来爬取网页代码。 首先&a…

【ROS2指南-9】Bag的record和play操作

目标&#xff1a;记录在某个话题上发布的数据&#xff0c;以便您可以随时回放和检查它。 教程级别&#xff1a;初学者 时间&#xff1a; 10分钟 内容 背景 先决条件 任务 1 设置 2 选择一个主题 3 ros2包记录 4 ros2 包信息 5 ros2包玩 概括 下一步 相关内容 背景 …

Java 简易版 TCP UDP聊天

客户端 import java.io.*; import java.net.Socket; import java.util.Date; import javax.swing.*;public class MyClient {private JFrame jf;private JButton jBsend;private JTextArea jTAcontent;private JTextField jText;private JLabel JLcontent;private Date data;pr…

自定义类加载器

通过继承ClassLoader类&#xff0c;重写findClass方法&#xff0c;实现自定义类加载器。 一、自定义类加载器 package com.molange.JavaSE.myclassloader;import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; impor…

MATLAB - 绘制立体图(平面+水深)

目录 代码结果 代码 % 在 X-Y 平面上绘图 % 正常绘制平面图 [X,Y,Z] peaks; contour(X,Y,Z,20); hold on% ****重点******************************************** % 改为三维视图&#xff0c;具体可以help % view(3); %此时的平面图对应z0 &#xff1b;默认az-37.5&#x…

大模型在企业知识库场景的落地思考

一、引言 在这个信息爆炸的时代&#xff0c;企业的知识库已不再是简单的数据堆砌&#xff0c;而是需要智能化、高效率的知识管理和利用。大模型作为AI领域的一个重要突破&#xff0c;正逐步成为企业知识库管理的强大助力。通过前面一段时间对于大模型在企业落地的深入调研和实…

Linux---逻辑卷管理

本章主要介绍逻辑卷的管理。 了解什么是逻辑卷创建和删除逻辑卷扩展逻辑卷缩小逻辑卷逻辑卷快照的使用 前面介绍了分区的使用&#xff0c;如果某个分区空间不够&#xff0c;想增加空间是非常困难的。所以&#xff0c;建议尽可能使用逻辑卷而非普通的分区&#xff0c;因为逻辑卷…

【C语言】数据在内存中的存储

目录 练笔 整型数据的存储&#xff1a; char 型数据——最简单的整型 整型提升&#xff1a; 推广到其他整形&#xff1a; 大小端&#xff1a; 浮点型数据的存储&#xff1a; 存储格式&#xff1a; 本篇详细介绍 整型数据&#xff0c;浮点型数据 在计算机中是如何储存的。…

Redis和MySQL双写一致性实用解析

1、背景 先阐明一下Mysql和Redis的关系&#xff1a;Mysql是数据库&#xff0c;用来持久化数据&#xff0c;一定程度上保证数据的可靠性&#xff1b;Redis是用来当缓存&#xff0c;用来提升数据访问的性能。 关于如何保证Mysql和Redis中的数据一致&#xff08;即缓存一致性问题…

RT-DETR手把手教程:NEU-DET钢材表面缺陷检测任务 | 不同网络位置加入EMA注意力进行魔改

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文独家改进&#xff1a;本文首先复现了将EMA引入到RT-DETR中&#xff0c;并跟不同模块进行结合创新&#xff1b;1&#xff09;多种Rep C3结合&#xff1b;2&#xff09;直接作为注意力机制放在网络不同位置&#xff1b; NEU-DET钢材…

C#excel导入dategridview并保存到数据库/dategridview增加一行或几行一键保存数据库

excel导入到dategridview显示并保存到数据库 dategridview增加一行或几行一键保存数据库 ExcelHelper类(这个要导入NPOI包) using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using System.Collections.Generic; using Syste…

java多人聊天

服务端 package 多人聊天;import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList;…

用 Bytebase 做数据库 schema 迁移

数据库 schema 迁移指修改管理数据库结构的变更&#xff0c;包括为数据库添加视图或表、更改字段类型或定义新约束。Bytebase 提供了可视化 GUI 方便迁移数据库 schema&#xff0c;本教程将展示如何使用 Bytebase 为 schema 迁移配上 SQL 审核&#xff0c;自定义审批流&#xf…

解决Could not establish connection to : XHR failed

解决Could not establish connection to : XHR failed 问题描述 用vscode用远程连接服务器时总报上面的错误&#xff0c;用xshell和Xftp和vscode终端都可以连上&#xff0c;但是用vscode的ssh连接缺总报错&#xff0c;导致无法连接服务器进行代码调试 一、原因 原因可能是在…

Python tkinter 之文件对话框(filedialog)

文章目录 1 文件1.1 获取单个文件名称&#xff1a;askopenfilename()1.2 获取多个文件名称&#xff1a;askopenfilenames()1.3 获取单个文件属性&#xff1a;askopenfile()1.4 获取多个文件属性&#xff1a;askopenfiles()1.5 获取保存文件的路径&#xff1a;asksaveasfilename…

树莓派4B iio子系统 mpu6050

编写基于iio的mpu6050 遇到的问题&#xff0c;在读取数据时&#xff0c;读出来的数据不能直接拼接成int类型 需要先将其转换成short int&#xff0c;再转换成int 效果如图所示 注&#xff1a;驱动是使用的modprobe加载的 简单画的思维导图 设备树修改部分&#xff1a; …