蓝桥杯国赛备赛复习——数据结构

一、链表

1.1 单链表
java 复制代码
package 链表;

public class 单链表 {
	static int e[] = new int[11010]; // index号节点的value值(value)
	static int ne[] = new int[11010];// index号节点的下一个节点的index(nextNode)
	static int head=-1,idx=0;      // 头节点的index,当前可用的最小index
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 遍历单链表
		for(int i=head;i!=-1;i = ne[i]) {
			System.out.print(e[i]);
		}
	}
	//	插入------链头
	static void add_to_head(int x) {
		e[idx] = x; ne[idx] = head; head = idx; idx++;
	}
    //	插入------第k个节点之后
	static void add_afterK(int k,int x) {
		e[idx] = x; ne[idx] = ne[k]; ne[k] = idx; idx++;
	}
	//  删除------第k个节点之后节点
	static void remove(int k,int x) {
		ne[k] = ne[ne[k]];
	}
}

例题: B3631 单向链表 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

java 复制代码
import java.util.*;
public class Main {
	static int e[] = new int[11011];
	static int en[] = new int[11011];
	static int head = 0,idx = 1;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		e[0] = 1; en[0] = -1;
		int q = in.nextInt();
		while(q--!=0) {
			int o = in.nextInt();
			if(o==1) {
				int x = in.nextInt();
				int y = in.nextInt();
				add(x,y);
			}else if(o==2) {
				int x = in.nextInt();
				int index = find_index(x);
				if(en[index]==-1) {
					System.out.print("0\n");
				}else {
					System.out.print(e[en[index]]+"\n");
				}
			}else {
				int x = in.nextInt();
				remove(x);
			}
		}
	}
	static void add(int x,int y) {
		x = find_index(x);
		e[idx] = y;
		en[idx] = en[x];
		en[x] = idx;
		idx++;
	}
	static void remove(int x) {
		x = find_index(x);
		en[x] = en[en[x]];
	}
	static int find_index(int x) {
		for(int i=head;i!=-1;i = en[i])
			if(e[i]==x)
				return i;
		return -1;
	}
}

这个代码会有三个数据超时,应该改成快读就行了。

1.12双向链表
java 复制代码
package 链表;

public class 双链表 {
	static int e[] = new int[11010]; // index号节点的value值(value)
	static int l[] = new int[11010];// index号节点的左边节点的index
	static int r[] = new int[11010];// index号节点的右边节点的index
	static int idx = 2;
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}
	// 初始化
	static void init() {
		r[0] = 1; l[1] = 0;
	}
	// K的右边插入x
	static void add_afterK(int k,int x) {
		e[idx] = x;
		l[idx] = k;
		r[idx] = r[k];
		l[r[k]] = idx;
		r[k] = idx;
	}
	// K的左边插入x
	static void add_beforeK(int k,int x) {
		add_afterK(l[k],x);
	}
	//  删除------第k个节点
	static void remove(int k) {
		r[l[k]] = r[k];
		l[r[k]] = l[k];
	}
}

二、栈和队列

2.1 单调栈
2.2 单调队列

三、KMP

相关推荐
船厂电气自动化ai大模型8 小时前
AI大模型与数学·第57课 傅里叶全套工具链综合实战:串联级数/连续变换/DFT/FFT,图像、音频、扩散模型完整例题
数据结构·人工智能·深度学习·算法·机器学习
wuyk5558 小时前
从零吃透Modbus通信|第3章:STM32 Modbus RTU主机
服务器·开发语言·网络·数据结构·stm32·单片机·嵌入式硬件
Brilliantwxx9 小时前
【算法从零到千】【59-65】链表专题
数据结构·链表
重生之后端学习9 小时前
53. 最大子数组和[中等]✅
java·数据结构·算法·leetcode·职场和发展
小手cool12 小时前
使用递归对数组进行反转操作
java·数据结构·算法
码行山野赴时序归途12 小时前
从暴力到最优:三道 C 语言入门题的解法思路
c语言·开发语言·数据结构·算法·leetcode·排序算法
CarIise14 小时前
C语言结构体与链表
数据结构·算法
charlie11451419116 小时前
deque、list 与 forward_list:vector 之外的三个选择
开发语言·数据结构·c++·list·开源项目
动词ing16 小时前
【学习笔记】数据结构(数组滑动窗口+无重复字符的最长字串题目)
数据结构·笔记·学习
拓人间精准客17 小时前
ToB 销售获客避坑指南:如何用全维度大数据实现降本增效
大数据·数据结构·单例模式