基础数据结构-链表,栈,队列

news2024/11/19 8:53:10

链表

常见的链表有单链表和双链表

单链表:每个结点有一个next指针指向下一个结点,data存放数据

双链表:每个结点有一个next指针指向下一个结点,prev指针指向上一个结点,data存放数据。

4的下一结点为-1,表示下一结点为空,不存在下一结点

p是指向上一结点,e是指向下一结点

单链表

实现单链表只需要两个数组int e[N]和int data [N],还需要tail和head来表示尾结点和头节点(头节点一般不存放数据),idx表示当前已用的内存空间,用于开店,我们用-1表示空。

e[i]表示地址为i的结点上的下一个结点的地址(即数组下标)。

data[i]表示地址为i的结点上的数据。

尾部插入结点    插入一个节点到尾部:e[tail]=++idx(++idx先把值给赋出来),e[idx]=-1(将新的伪结点设为空,表示后面没有结点),data[idx]=val(地址的值赋进来),tail=idx(伪结点变成这个新的结点);

中间插入结点    往地址adr的后面插入一个结点,e[++idx]=e[adr](插入结点的下一个指针指向)比如要在3,4中间插一个5,3指向4,让5也指向4,e[adr]=idx(比如让3指向5),data[idx]=val(赋值);

删除   将adr后面的结点删除(adr部位tail):e[adr]=e[e[adr]];(当前这个位置的指针指向下下个指针就可以了)

单链表只能处理”后面“的操作,不能找到前一个点。

双链表

单链表和双链表的区别在于,双链表不仅在next指针(e数组)来表示下一个结点,还有一个prev指针(p数组)来表示上一个结点的位置。

例题

给定按从小到大的顺序排列的数字1到n,随后对他们进行m次操作,每次将一个数字x移动到数字y之前或之后,请输出完成这m次操作后他们的顺序

输入格式

第一行为两个数字n,m表示初始状态为1到n的从小到大排序,后续有m次操作。

第二行到第m+1行,每行三个数x,y,z,当z=0是,将x移动到y之后,当z=1时,将x移动到y之前。

输出格式

一行,n个数字,中间用空格隔开,表示m次操作完成后的排列顺序。

样例输入

5 3

3 1 0

5 2 1

2 1 1

样例输出

2 1 3 5 4

思路

利用双链表去模拟

列表写成循环列表

package shuanlianbiao;
import java.util.*;
public class chapter1 {
	public static int[]pre=new int [(int)1e4+1];
	public static int[]next=new int [(int)1e4+1];
	public static void res(int x) {
		int a=pre[x];
		int b=next[x];
		next[a]=b;
		pre[b]=a;
	}//删除
	public static void add(int x,int y) {
		int z=next[y];
		pre[z]=x;
		pre[x]=y;
		next[y]=x;
		next[x]=z;
	}
	public static void main(String agrs[]) {
		Scanner scan=new Scanner(System.in);
		int n=scan.nextInt();
		int m=scan.nextInt();
		for(int i=1;i<n;i++) {
			pre[i]=i-1;
			next[i]=i+1;
		}
		next[0]=1;
		pre[0]=0;
		next[n]=0;
		pre[n]=n-1;
		for(int i=0;i<m;i++) {
			int x=scan.nextInt();
			int y=scan.nextInt();
			int z=scan.nextInt();
			if(z==0) {
				y=pre[y];
			}
			res(x);
			add(x,y);
		}
		for(int i=next[0];i>0;i=next[i]) {
			System.out.print(i+" ");
		}
	}
}

栈可以看作只能对顶部操作的数组,结构比较简单,只需要一个数组表示内存空间,一个数字表示栈顶即可

int stk[N],top;

往栈内新增元素:stk[++top]=x;(顶部操作)

删除栈顶元素:top--

判断栈是否为空:top==0

 例题

小蓝有一个长度为 n 的括号串,括号串仅由字符 ( 、 ) 构成,请你帮他判断一下该括号串是否合法,合法请输出 Yes ,反之输出 No 。

合法括号序列:

  1. 空串是合法括号序列。

  2. 若 s 是合法括号序列,则 ( s ) 也是合法括号序列。

  3. 若 s,t 都是合法括号序列,则 st 也是合法括号序列。

例如 ()() , (()) , (())() 均为合法括号序列。

输入格式

第一行包含一个正整数 n ,表示括号串的长度。

第二行包含一个长度为 n 的括号串。

输出格式

输出共 11 行,若括号串合法请输出 Yes ,反之输出 No 

 代码

package zhan;
import java.util.*;
public class chapter1 {
	public static void main(String args[]) {
		Scanner scan=new Scanner(System.in);
		char[] c=scan.next().toCharArray();
		int top=0;
		boolean f=true;
		for(char x:c) {
			if(x=='(') {
				top++;
			}else {
				top--;
				if(top<0) {
					f=false;
				}
			}
			                                                   
			
		}
		if(top!=0) {
			f=false;
		}
		if(f) {
			System.out.print("YES");
		}else {
			System.out.print("No");
		}
	}
}

队列

队列是一个可以对头和尾操作的数组

需要一个数组,两个整形变量一个表示头head一个表示尾tail

int q[N],h=1,t=0;

有效元素的区间为[h,t]

入队:q[++t]=x;

出队:h++;

检查队列是否为空:t-h+1==0

例题

小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。

这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换。对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译;如果内存中没有,软件就会在外存中的词典内查找,查出单词的中文含义然后翻译,并将这个单词和译义放入内存,以备后续的查找和翻译。

假设内存中有 M 个单元,每单元能存放一个单词和译义。每当软件将一个新单词存入内存前,如果当前内存中已存入的单词数不超过 M−1,软件会将新单词存入一个未使用的内存单元;若内存中已存入 M 个单词,软件会清空最早进入内存的那个单词,腾出单元来,存放新单词。

假设一篇英语文章的长度为 N 个单词。给定这篇待译文章,翻译软件需要去外存查找多少次词典?假设在翻译开始前,内存中没有任何单词。

输入描述

输入共 2 行。每行中两个数之间用一个空格隔开。

第一行为两个正整数 M 和 N,代表内存容量和文章的长度。

第二行为 N 个非负整数,按照文章的顺序,每个数(大小不超过 1000)代表一个英文单词。文章中两个单词是同一个单词,当且仅当它们对应的非负整数相同。

其中,0<M≤100,0<N≤1000。

输出描述

输出共 1 行,包含一个整数,为软件需要查词典的次数。

输入输出样例

示例 1

输入

3 7
1 2 1 5 4 4 1

输出

5

示例2 

输入

2 10
8 824 11 78 11 78 11 78 8 264 

输出

6

 

package duilie;
import java.util.*;
public class chapter1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scan=new Scanner(System.in);
		int m=scan.nextInt();
		int n=scan.nextInt();
		int queue[]=new int[n+1];
		int h=1,t=0,res=0;
		for(int i=0;i<n;i++){
			int x=scan.nextInt();
			boolean f=true;
			for(int j=h;j<=t;j++) {
				if(queue[j]==x) {
					f=false;
				}
			}
			if(f) {
				queue[++t]=x;
				res++;
			}
			if(t-h+1>m) {
				++h;
			}
		}
		System.out.println(res);
	}

}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【GO语言卵细胞级别教程】11.探索Go语言的面向对象编程之美(含源码仅此一份,先到先得)

【GO语言卵细胞级别教程】11.探索Go语言的面向对象编程之美&#xff08;含源码仅此一份&#xff0c;先到先得&#xff09; 目录 【GO语言卵细胞级别教程】11.探索Go语言的面向对象编程之美&#xff08;含源码仅此一份&#xff0c;先到先得&#xff09;1.面向对象的引用1.1简介1…

详解TCP/IP五层模型

目录 一、什么是TCP五层模型&#xff1f; 二、TCP五层模型的详细内容 1. 应用层 2. 传输层 3. 网络层 4. 数据链路层 5. 物理层 三、网络设备所在分层 封装和分⽤ 三、Java示例 引言&#xff1a; 在网络通信中&#xff0c;TCP/IP协议是至关重要的。为了更好地理解TCP协议的工…

02-JDK新特性-try-with-resources自动管理资源关闭

try-with-resources 为什么要介绍这个了 看看一下以下代码&#xff1a; public static void fileCopyByTryWithResources(File src, File des) throws IOException {try (FileInputStream fis new FileInputStream(src); FileOutputStream fos new FileOutputStream(des);…

AI预测福彩3D第26弹【2024年4月4日预测--第4套算法重新开始计算第11次测试】

今天清明节假日&#xff0c;一会要外出&#xff0c;可能要晚点回来。咱们尽早先把预测数据跑完&#xff0c;把结果发出来供各位彩友参考。合并下算法&#xff0c;3D的预测以后将重点测试本套算法&#xff0c;因为本套算法的命中率较高。以后有时间的话会在第二篇文章中发布排列…

微电网优化:基于肝癌算法(Liver Cancer algorithm, LCA)的微电网优化(提供MATLAB代码)

一、微电网优化模型 微电网是一个相对独立的本地化电力单元&#xff0c;用户现场的分布式发电可以支持用电需求。为此&#xff0c;您的微电网将接入、监控、预测和控制您本地的分布式能源系统&#xff0c;同时强化供电系统的弹性&#xff0c;保障您的用电更经济。您可以在连接…

Vue3【进阶】

简介 https://cn.vuejs.org/guide/introduction.html 创建vue3工程 【基于 vue-cli创建】 基本和vue-cli的过程类似&#xff0c;只是选择的时候用vue3创建 【基于vite创建】【推荐】 【官网】https://vitejs.cn/ 【可以先去学一下webpack】 步骤 【https://cn.vitejs.…

【APUE】网络socket编程温度采集智能存储与上报项目技术------多进程编程

作者简介&#xff1a; 一个平凡而乐于分享的小比特&#xff0c;中南民族大学通信工程专业研究生在读&#xff0c;研究方向无线联邦学习 擅长领域&#xff1a;驱动开发&#xff0c;嵌入式软件开发&#xff0c;BSP开发 作者主页&#xff1a;一个平凡而乐于分享的小比特的个人主页…

item_search-按关键字搜索淘宝商品接口:精准关键字,多样搜索类型,智能排序——淘宝购物新体验

淘宝购物新体验&#xff1a;item_search接口——精准关键字、多样搜索类型与智能排序 在淘宝购物的新体验中&#xff0c;item_search接口扮演着至关重要的角色&#xff0c;它为用户提供了精准关键字搜索、多样搜索类型以及智能排序等功能&#xff0c;极大地提升了购物的便捷性…

趣学前端 | 综合一波CSS选择器的用法

背景 最近睡前习惯翻会书&#xff0c;重温了《HTML5与CSS 3权威指南》。这本书&#xff0c;分上下两册&#xff0c;之前读完了上册&#xff0c;下册基本没翻过。为了对得起花过的每一分钱&#xff0c;决定拾起来近期读一读。 CSS 选择器 在CSS3中&#xff0c;提倡使用选择器…

Python爬虫-懂车帝城市销量榜单

前言 本文是该专栏的第23篇,后面会持续分享python爬虫干货知识,记得关注。 最近粉丝留言咨询某汽车平台的汽车销量榜单数据,本文笔者以懂车帝平台为例,采集对应的城市汽车销量榜单数据。 具体的详细思路以及代码实现逻辑,跟着笔者直接往下看正文详细内容。(附带完整代码…

程序员的工资是多少,和曹操有莫大的关系

曹操是谁大家都知道了吧&#xff0c;他是三国时期的一个有名的大老板&#xff0c;谁知道曹操的工资是多少呢&#xff1f;这个其实也不好说&#xff0c;有时候曹操赚很多的钱&#xff0c;有时候也亏血本&#xff0c;甚至连脑袋都差点掉了。创业不容易啊&#xff0c;曹老板也是如…

动力云客-B站(第一天)

一 项目技术选型及开发工具 前后端分离的项目&#xff08;前端项目 后端项目&#xff09; 前端&#xff1a;Html、CSS、JavaScript、Vue、Axios、Element Plus后端&#xff1a;Spring Boot、Spring Security、MyBatis、MySQL、Redis 相关组件&#xff1a;HiKariCP&#x…

科东软件参加广州机器人产业联盟举办先进工业母机专家研讨会

工业母机是“制造机器的机器”&#xff0c;具有基础性、通用性、战略性特征&#xff0c;包括了减材切削机床、等材成形装备、增材制造装备及其控制系统等&#xff0c;是衡量国家工业水平和竞争力的重要标志。广东省作为全球知名的制造业基地&#xff0c;非常重视高端装备领域工…

(三)LTspice学习交流分析

文章目录 前言一、Edit simulation cmd二、添加激励总结 前言 上一节我们学习了LTspice的安装&#xff0c;很简单&#xff0c;无脑安装 &#xff08;一&#xff09;LTspice简介 &#xff08;二&#xff09;LTspice学习之简介2 今天我们来学习一下LTspice另一个非常重要的仿真功…

【VASP学习】在Ubuntu系统安装vasp.5.4.4的全过程(包括VASP官方学习资料、安装过程中相关编辑器的配置、VASP的编译及VASP的测试)

在Ubuntu系统安装vasp.5.4.4的全过程 VASP的简介与相关学习资料安装前的准备工作及说明安装过程intel编译器的安装VASP的编译VASP的测试 参考来源 VASP的简介与相关学习资料 VASP(Vienna Ab initio Simulation Package)是基于第一性原理对原子尺度的材料进行模拟计算的软件。比…

7种链游媒体宣发工具助力游戏营销-华媒舍

一. 什么是链游媒体 链游媒体是指以区块链技术为基础&#xff0c;实现游戏与媒体资源之间的连接和交互的媒体形态。通过区块链技术&#xff0c;链游媒体能够确保游戏内容和媒体信息的透明性和不可篡改性&#xff0c;提供更加公正、透明的游戏环境。 二. 链游媒体宣发工具的重要…

使用 mitmproxy 抓包 grpc

昨天在本地执行 grpc 的 quick start&#xff08;python版本的&#xff09;&#xff0c;我了解 grpc 内部使用的是 HTTP2&#xff0c;所以我就想着抓包来试试&#xff0c;下面就来记录一下这个过程中的探索。 注意&#xff1a;我的电脑上面安装了 Fiddler Classic&#xff0c;…

基于卷积神经网络的土豆疾病识别系统(pytorch框架)【python源码+UI界面+前端界面+功能源码详解】

功能演示&#xff1a; 土豆疾病识别系统&#xff0c;基于vgg16&#xff0c;resnet50卷积神经网络&#xff08;pytorch框架&#xff09;_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积神经网络的土豆疾病识别系统是在pytorch框架下实现的&#xff0c;系统中有两…

vue 浅解watch cli computed props ref vue slot axios nexttick devtools说明使用

Vue.js 是一个强大的前端框架&#xff0c;它提供了很多有用的功能和工具。你提到的这些特性&#xff08;watch、cli、computed、props、ref、slot、axios、nextTick、devtools&#xff09;在 Vue 中各自扮演着不同的角色。下面我会逐一解释这些特性如何在 Vue 中使用&#xff1…

Windows 2008虚拟机安装、安装VM Tools、快照和链接克隆、添加硬盘修改格式为GPT

一、安装vmware workstation软件 VMware workstation的安装介质&#xff0c;获取路径&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1AUAw_--yjZAUPbsR7StOJQ 提取码&#xff1a;umz1 所在目录&#xff1a;\vmware\VMware workstation 15.1.0 1.找到百度网盘中vmwa…