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

ops/2024/11/15 8:34:36/

一、链表

1.1 单链表
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,当前可用的最小indexpublic 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)

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 stubScanner 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双向链表
package 链表;public class 双链表 {static int e[] = new int[11010]; // index号节点的value值(value)static int l[] = new int[11010];// index号节点的左边节点的indexstatic int r[] = new int[11010];// index号节点的右边节点的indexstatic int idx = 2;public static void main(String[] args) {// TODO Auto-generated method stub}// 初始化static void init() {r[0] = 1; l[1] = 0;}// K的右边插入xstatic 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的左边插入xstatic 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


http://www.ppmy.cn/ops/31682.html

相关文章

windows ubuntu sed,awk,grep篇,8,Awk 语法和基础命令

目录 51.Awk 命令语法 52.Awk 程序结构(BEGIN,body,END)区域 53.打印命令 54.模式匹配 Awk 是一个维护和处理文本数据文件的强大语言。在文本数据有一定的格式,即每行数据包 含多个以分界符分隔的字段时,显得尤其有用。即便是输入文件没有一定的格式&a…

深入探索Element-UI:构建高效Web前端的利器

深入探索Element-UI:构建高效Web前端的利器 引言:前端框架的选择与Element-UI的定位一、Element-UI初探二、快速上手:安装与配置三、核心组件深度解析四、实用功能与进阶技巧五、性能优化与最佳实践六、实战案例分析七、与其他技术栈的集成 安…

vue3 jspdf,element table 导出excel、pdf,横板竖版分页

多个表格需要,pdf需要的格式与原本展示的表格样式不同 1.创建一个新的表格,设置pdf需要的样式,用vue的h函数放入dom中 2.excel用xlxs插件直接传入新建el-table的dom,直接导出 3.pdf导出类似excel黑色边框白底黑字的文件,把el-t…

用C#写一个特性,在函数上面可以自动计算函数耗时情况

用C#写一个特性,在函数上面可以自动计算函数耗时情况 TimingAttribute类是自定义的特性类,用来标记需要计时的方法。TimingInterceptor类是一个拦截器,它通过反射来拦截被TimingAttribute标记的方法,并在方法执行前后进行计时。My…

基于Spring Boot的音乐网站与分享平台设计与实现

基于Spring Boot的音乐网站与分享平台设计与实现 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/idea 系统部分展示 系统功能界面图,在系统首页可以查看首…

C语言指针是⼀种特殊的变量,只能⽤来保存地址。 这句话对吗?

一、问题 对于这个问题,答案是正确的,那为什么呢? 二、解答 本题考查的是对指针概念的理解。指针类型不同于整型和其他的数据类型,它是专门⽤来存放地址的数据类型。指针变量的定义形式为: 基类型 *变量名 例如&…

前端初学者的 CSS 入门

文章导读:AI 辅助学习前端,包含入门、进阶、高级部分前端系列内容,当前是 CSS 的部分,瑶琴会持续更新,适合零基础的朋友,已有前端工作经验的可以不看,也可以当作基础知识回顾。 从这篇文章开始…

CentOS中常用的命令

CentOS7常用的命令集合 ls命令 ls [-a -l -h] [Linux路径] -a -l -h是可选的参数,[Linux路径]是可选的参数 当不使用选项和参数,直接用ls时,以平铺的形式,列出当前工作目录下的内容; -a表示 all ,即列出全…