数据结构——线性表(Code)

下面写的代码可能感觉会很乱,所以加上了目录,意在为了引导,也就是你需要回顾哪个算法,就能够快速定位到该位置,如果从上往下去找的话,估计脑壳也疼死了。

一、线性表的基本操作
(一)顺序表的基本操作
1. 顺序表的结构体
#define MAX_SIZE 30				//设置顺序表最大容量
typedef struct
{
   
	int data[MAX_SIZE];			//设置数据最大长度
	int length;					//设置数据当前长度

}Sqlist;
2. 顺序表的查找
/*
method:
	顺序表的查找
param:
	L 顺序表
	n代表要查找的元素
*/

int Find_Elem(Sqlist L, int n)
{
   
	int result = 0;								//存放所查找到匹配值的下标
	for (result; result < n; result++)
	{
   
		if (L.data[result] == n)
			return result;
	}
	return ERROR;
}
3. 顺序表的插入
/*
method:
	顺序表的插入
param:
	sqlist 要操作的顺序表
	pos    要插入的位置
	data   要插入的数据
*/
int Insert_Elem(Sqlist* sqlist, int pos, int data)
{
   
	int i = 0;
	if (pos<0 || pos>sqlist->length || sqlist->length == MAX_SIZE)		//这里是判断 如果 查询位置不在线性表内,或者线性表长度满了,则返回Error
		return ERROR;
	for (i = sqlist->length-1; i >= pos; i--)							//这个循环将pos位置后面的元素由后往前向后挪1个位置
		sqlist->data[i+1] = sqlist->data[i];
	sqlist->data[pos] = data;											//插入设定值
	sqlist->length += 1;												//线性表长度加1
	return OK;
}
4. 顺序表的删除
/*
method:
	顺序表的删除
param:
	sqlist	要操作的顺序表
	pos		要删除的位置
	num		存放删除的元素
*/

int Delete_Elem(Sqlist* sqlist, int pos,int *num)						
{
   
	int i = pos;
	if (pos<0 || pos >sqlist->length)
		return ERROR;
	*num = sqlist->data[pos];											//得到删除的值
	for (i; i < sqlist->length; i++)									//由前往后,pos位置后面的值依次往前移动
		sqlist->data[i] = sqlist->data[i + 1];
	sqlist->length -= 1;												//线性表长度减1
	return OK;
}
5. 顺序表的更改
/*
method:
	顺序表的更改
param:
	sqlist	要操作的顺序表
	pos		要修改的位
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常抱歉之前的代码示例没有考虑并发情况下的数据库code重复问题,我来为您提供一种解决方案。 在并发情况下,为了避免数据库中的code重复,您可以使用数据库的唯一约束来确保数据的唯一性。具体操作如下: 1. 在数据库中为code字段添加唯一索引(Unique Index)约束。这可以通过在创建表时或使用ALTER TABLE语句来实现。例如: ```sql ALTER TABLE your_table ADD UNIQUE (code); ``` 2. 在代码中捕获并处理数据库操作时的唯一约束异常。当插入或更新数据时,如果发生了唯一约束冲突,数据库会抛出异常。您可以在代码中捕获该异常,并根据需要进行逻辑处理。例如: ```java @Service public class MyService { @Autowired private MyEntityMapper myEntityMapper; public void processList(List<MyEntity> list) { List<MyEntity> insertList = new ArrayList<>(); List<MyEntity> updateList = new ArrayList<>(); List<MyEntity> dbList = myEntityMapper.selectAll(); for (MyEntity entity : list) { if (dbList.stream().anyMatch(e -> e.getCode().equals(entity.getCode()))) { updateList.add(entity); } else { insertList.add(entity); } } try { if (!insertList.isEmpty()) { myEntityMapper.insertBatch(insertList); } } catch (DuplicateKeyException e) { // 处理唯一约束冲突异常 // 可以选择忽略重复数据或进行其他逻辑处理 } try { if (!updateList.isEmpty()) { myEntityMapper.updateBatch(updateList); } } catch (DuplicateKeyException e) { // 处理唯一约束冲突异常 // 可以选择忽略重复数据或进行其他逻辑处理 } } } ``` 在上述代码中,我们使用Java 8的Stream API来进行代码比对,并在插入和更新操作时捕获了数据库唯一约束冲突的异常(DuplicateKeyException)。在异常处理块中,您可以根据具体需求选择如何处理重复数据。 通过添加数据库的唯一约束和在代码中捕获处理唯一约束冲突的异常,可以保证并发情况下数据库中的code不会重复。 请注意,这只是一种解决方案,并发情况下的数据库操作需要综合考虑并发控制和事务处理等方面的问题。具体实现还需根据您的具体需求进行调整和优化。 希望这个解决方案对您有所帮助。如果您有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值