线性表的链式存储结构与操作 题目编号:455

news2025/1/19 16:34:15

题目描述

评论
请你定义一个链表,可以对链表进行“在某个元素之前插入一些元素”、“删除某个位置的元素”、“查找某元素”、“获取某个位置的元素”、“遍历输出所有元素”、“求链表的长度”等操作。键盘输入一些命令,可以执行上述操作。本题中,链表元素为整数,链表的第一个元素位置为1,链表的最大长度为20。

输入描述

各个命令以及相关数据的输入格式如下:
在某个位置之前插入操作的命令:I,接下来的一行是插入的元素个数n,
下面是n行数据,每行数据有两个值,分别代表插入位置与插入的元素值
查找某个元素:S x,x是要查找的元素值
获取某个位置的元素:G i,i是需要获取的元素位置
删除某个位置的元素:D i,i是被删除的元素位置
求链表的长度:L
遍历输出所有元素:V
当输入的命令为E时,程序结束。

输出描述

当输入的命令为S时,输出要查找元素的位置,如果没找到,输出None
当输入的命令为G时,输出获取的元素值,如果输入的元素位置不正确,
输出“位置不正确”
当输入的命令是D时,输出被删除的那个元素值,如果表空,输出“下溢”,
如果输入的位置不正确,输出“位置不正确”
当输入命令是I时,如果输入的位置不正确,输出“位置不正确”
当输入的命令是L时,输出链表的长度
注意,所有的元素均占一行。

输入样例

I
2
1 1
2 2
S 2
D 1
I
2
1 3
2 4
G 2
L
V
E

输出样例

2
1
4
3
3
4
2
内存阀值:50240K 耗时阀值:5000MS

代码

#include <iostream>

using namespace std;

struct Node {
	int _val;
	Node* _next;
	Node(int val):_val(val), _next(NULL) {}
};

class List {
	public:
		List();
		~List();

	public:
		void Insert(int pos, int val);
		int Search(int val);
		int Get(int pos);
		int Delete(int pos);
		int getLength();
		void Print();

	private:
		Node* head_;
		int length_;
};

List::List() {
	head_ = new Node(-1);
	length_ = 0;
}

List::~List() {
	Node* previousNext = NULL;

	for (Node* p = head_; p != NULL; p = previousNext) {
		previousNext = p->_next;
		delete p;
	}
}

void List::Insert(int pos, int val) {
	if (pos < 1) throw "位置不正确";

	int count = 0;
	Node* node = new Node(val);

	for (Node* p = head_; p != NULL; p = p->_next) {
		if (count + 1 == pos) {
			node->_next = p->_next;
			p->_next = node;
		}
		count++;
	}

	length_++;
}

int List::Search(int val) {
	int count = 0;
	int pos;
	bool isFind = false;

	for (Node* p = head_; p != NULL; p = p->_next) {
		if (p->_val == val) {
			isFind = true;
			pos = count;
			break;
		}
		count++;
	}

	if (isFind == false) throw "None";

	return pos;
}

int List::Delete(int pos) {
	if (length_ == 0) throw "下溢";
	if (pos < 1 || pos > length_) throw "位置不正确";

	int count = 0;
	int val;
	Node* DeletedNode = NULL;

	for (Node* p = head_; p != NULL; p = p->_next) {
		if (count + 1 == pos) {
			DeletedNode = p->_next;
			val = DeletedNode->_val;
			p->_next = p->_next->_next;
			delete DeletedNode;
			break;
		}
		count++;
	}

	length_--;

	return val;
}

int List::Get(int pos) {
	if (pos < 1 || pos > length_) throw "位置不正确";

	int count = 0;
	int val;

	for (Node* p = head_; p != NULL; p = p->_next) {
		if (count == pos) {
			val = p->_val;
			break;
		}
		count++;
	}

	return val;
}

int List::getLength() {
	return length_;
}

void List::Print() {
	for (Node* p = head_->_next; p != NULL; p = p->_next)
		cout << p->_val ;
}

int main() {
	List list;
	char command;
	int n, pos, val;

	while (cin >> command) {
		if (command == 'E') break;

		try {
			switch (command) {
				case 'I':
					cin >> n;
					for (int i = 0; i < n; i++) {
						cin >> pos >> val;
						list.Insert(pos, val);
					}
					break;

				case 'S':
					cin >> val;
					cout << list.Search(val);
					break;

				case 'G':
					cin >> pos;
					cout << list.Get(pos);
					break;

				case 'D':
					cin >> pos;
					cout << list.Delete(pos) ;
					break;

				case 'L':
					cout << list.getLength() ;
					break;

				case 'V':
					list.Print();
					break;
			}
		} catch (const char* str) {
			cout << str ;
		}
	}

	return 0;
}

运行结果

在这里插入图片描述

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

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

相关文章

电控针阀和手动可变泄漏阀组合在超高真空度精密PID控制中的应用

摘要&#xff1a;超高真空度的控制普遍采用具有极小开度的可变泄漏阀对进气流量进行微小调节。目前常用的手动可变泄漏阀无法进行超高真空度的自动控制且不准确&#xff0c;电控可变泄漏阀尽管可以实现自动控制但价格昂贵。为了实现自动控制且降低成本&#xff0c;本文提出了手…

线性表的顺序存储结构与操作 题目编号:454

题目描述 请你定义一个顺序表&#xff0c;可以对顺序表进行如下操作&#xff1a; 在某个元素之前插入一些元素 删除某个位置的元素 查找某元素 获取某个位置的元素 遍历输出所有元素 键盘输入一些命令&#xff0c;可以执行上述操作。本题中&#xff0c;顺序表元素为整数&…

【BIM+GIS】Supernap加载实景三维倾斜摄影模型

OSGB是常见的倾斜模型格式,本文讲述如何在Supernap中加载实景三维倾斜摄影模型OSGB。 文章目录 一、生成配置文件二、加载倾斜模型1. 新建场景2. 添加模型3. 高程调整一、生成配置文件 点击【三维数据】→【数据管理】→【生成配置文件】。 参数设置如下: 源路径:选择倾斜模…

荔枝派Zero(全志V3S)开启mplayer,播放音视频

文章目录 前言一、buildroot 配置及编译1、开启 ALSA 和 MPLAY2、编译 二、拷贝到到 SD 卡1、将 rootfs.tar 解压缩到 SD 卡 rootfs 分区②、将 mp4 文件和 mp3 文件拷贝到 SD 卡 rootfs 分区 三、测试1、mplayer 使用2、mplayer 播放音频3、mplayer 播放视频 前言 mplayer 是…

华为在软件工具生态埋下多颗“种子”,静候国产软件产业萌芽

文丨智能相对论 作者丨沈浪 当代的数字经济大厦由各种各样的软件一块一块地搭建起来。然而&#xff0c;站在国内软件行业的中心&#xff0c;热闹的大多是来自上层的软件应用&#xff0c;而沉寂的却总是底层又难又基础的领域&#xff0c;比如软件开发。 软件开发&#xff0c;…

初始新能源汽车

文章目录 电动汽车的三级模块体系VCU&#xff08;整车控制器&#xff09;MCU&#xff08;电机控制器&#xff09;电池包和BMS&#xff08;电池管理系统&#xff09;电动汽车的大三电电动汽车的小三电电动汽车的模块组成 电动汽车的三级模块体系 总体上讲&#xff0c;整个新能源…

牛客刷题篇:客似云来 和 剪花布条(Java)

目录 题目一&#xff1a;客似云来 输入描述 输出描述 解题思路 代码 题目二&#xff1a;剪花布条 输入描述 输出描述 解题思路 代码 题目一&#xff1a;客似云来 链接&#xff1a;客似云来 NowCoder开了一家早餐店&#xff0c;这家店的客人都有个奇怪的癖好&#xff…

算法刷题|1143.最长公共子序列、1035.不相交的线、53.最大子数组和

最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&a…

跨子网通信【路由通信。配置路由】

路由通信条件是&#xff1a;服务器多网卡 or 单网卡多IP 查看路由表 route -n设置一网卡多IP 进行网络配置 进入setup中&#xff0c;选择网络配置 setup选择设备配置 去除DHCP动态协议 进来后&#xff0c;可能会发现无法对静态IP和子网掩码进行编辑&#xff0c;是因为你开启…

Qt - 从零到壹的 打地鼠 游戏

❤️‍&#x1f525;欢迎收看西北风的blog&#xff0c;好男人就是我&#xff0c;我就是西北风。✨ 目录 &#x1f7e5;一&#xff1a;创建一个主窗体 &#x1f7e3;二.&#xff1a;添加主窗口背景图片以及相关部件 &#x1f538;2.1 添加资源文件 2.1.1 添加资源文件 2.1…

NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_实际操作01---大数据之Nifi工作笔记0040

我们基于之前做的从mysql中获取数据,然后同步数据到mysql中,基于这个案例来做,可以看到上面是,这个案例的所有处理器,我们基于这个来改造. 1.首先我这里重新安装了一个mysql8.0.33 ,安装的是windows版本的,如果你是linux版本的,这里也说一下,如何开启binlog功能,首先要开启bin…

模拟和数字电路 —— 导学篇

前言&#xff1a;本科零基础跨考模电&#xff0c;时间不是很充裕&#xff0c;选择不补学电路分析的基础&#xff0c;直接开始学习模电。如果遇到不会的问题只学习指定的那块。 学习模电需要哪些基本电路知识 比如学习基本放大电路时经常用到的KVL、KCL&#xff1b;学习频率响应…

用C++实现Date类

Date类 判断 大于 小于 等于 等等运算符重载函数 我们先实现一个 > 的运算符重载&#xff0c;然后再实现一个 的运算符重载&#xff1a; bool Date::operator>(const Date& d) {if (_year > d._year){return true;}else if (_year d._year && _mo…

教你如何通过内网穿透轻松实现PL/SQL远程连接Oracle数据库【内网穿透】

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 转发自CSDN远程穿透的文章&#xff1a;公网远程连…

【PLC】贝加莱PLC理论及操作年度培训

最近在进行PLC培训&#xff0c;主要是贝加莱PLC产品的学习&#xff0c;学习了上下位机的一些基本操作&#xff0c;能够进行一些简单的实践&#xff0c;最后顺利通过年度考核。 0 引言 PLC&#xff1a;可编程逻辑控制器&#xff0c;由CPU、存储器、输入输出接口、电影以及外部设…

【unity专题篇】—GUI(IMGUI)思维导图详解

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

企业关键数据资产如何保护?腾讯安全联合“数据安全推进计划”落地主题沙龙

4月26日&#xff0c;腾讯安全联合中国信通院“数据安全推进计划”共同在深圳举办了数据安全研讨会&#xff0c;共同探讨新形势下如何让企业关键数据资产更安全。中国信息通信研究院云计算与大数据研究所高级业务主管龚诗然、腾讯云安全总经理李滨、炼石网络创始人兼CEO白小勇、…

【Vue3学习笔记1】一个清单应用帮你入门Vue.js

Vue 目前已经是国内最流⾏的前端框架之⼀&#xff0c;Vue 3 带来的诸多优化更是让前端圈迎来了新的潮流&#xff0c;比如&#xff1a; 基于 Proxy 的全新响应式实现&#xff1b; Composition API <script setup> 组织代码的更优方式&#xff1b; 更有料的 TypeScript 支…

关于C++的线程操作 | 双检锁与智能指针接口使用

文章目录 thread对象的构造this_threadconstructmutexref 用lambda表达式构造thread线程串行比并行快&#xff1f;CAS&#xff08;atomic类&#xff09;timed_mutexlock_guard,unique_guard&#xff0c;手动控制生命周期,为什么要使用条件变量不用条件变量带来的问题&#xff1…

【python基础语法三】列表,元组,集合,字典相关操作

列表的相关操作 1. 列表的拼接 (同元组) lst1 ["hello","world"] lst2 ["hello","python"] res lst1 lst2 print(res) # ["hello","world","hello","python"]2. 列表的重复 (同元组) …