数据结构与算法JavaScript描述练习------第3章列表

news2024/10/11 3:11:07

1. 增加一个向列表中插入元素的方法,该方法只在待插元素大于列表中的所有元素时才执 行插入操作。这里的大于有多重含义,对于数字,它是指数值上的大小;对于字母,它 是指在字母表中出现的先后顺序。

function isGreaterThan(a, b) {
	if (typeof a === 'number' && typeof b === 'number') {
		return a > b;
	} else if (typeof a === 'string' && typeof b === 'string') {
		return a.localeCompare(b) > 0;
	} else {
		throw new Error('Unsupported data type');
	}
}

function insertIfGreaterThanAll(element) {
	for (var i = 0; i < this.dataStore.length; i++) {
		if (!isGreaterThan(element, this.dataStore[i])) {
			return false;
		}
	}
	this.append(element);
	return true;
}

2. 增加一个向列表中插入元素的方法,该方法只在待插元素小于列表中的所有元素时才执 行插入操作。

function isLessThan(a, b) {
	if (typeof a === 'number' && typeof b === 'number') {
		return a < b;
	} else if (typeof a === 'string' && typeof b === 'string') {
		return a.localeCompare(b) < 0;
	} else {
		throw new Error('Unsupported data type');
	}
}

function insertIfLessThanAll(element) {
	for (var i = 0; i < this.dataStore.length; i++) {
		if (!isLessThan(element, this.dataStore[i])) {
			return false;
		}
	}
	this.append(element);
	return true;
}

3. 创建 Person 类,该类用于保存人的姓名和性别信息。创建一个至少包含 10 个 Person 对 象的列表。写一个函数显示列表中所有拥有相同性别的人。

function Person(name, gender) {
    this.name = name;
    this.gender = gender;
}

function displayPeopleByGender(peopleList, gender) {
	for (peopleList.front(); peopleList.currPos() < peopleList.length(); peopleList.next()) {
		if (peopleList.getElement().gender === gender) {
			console.log(gender + "性:" + peopleList.getElement().name);
		}
	}
}


var list = new List();
list.append(new Person("张三", "男"));
list.append(new Person("李四", "女"));
list.append(new Person("王五", "男"));
list.append(new Person("赵六", "女"));
list.append(new Person("刘七", "男"));
list.append(new Person("陈八", "女"));
list.append(new Person("周九", "男"));
list.append(new Person("吴十", "女"));
list.append(new Person("郑十一", "男"));
list.append(new Person("孙十二", "女"));
displayPeopleByGender(list, "男");
displayPeopleByGender(list, "女");

4. 修改本章的影碟租赁程序,当一部影片检出后,将其加入一个已租影片列表。每当有客 户检出一部影片,都显示该列表中的内容。

function checkOut(name, movie, filmList, customerList, rentList) {
	if (filmList.contains(movie)) {
		var c = new Customer(name, movie);
		customerList.append(c);
		rentList.append(movie);
		filmList.remove(movie);
		console.log("Rented movies: ");
        displayList(rentList);
	} else {
		console.log(movie + " is not available.");
	}
}

5. 为影碟租赁程序创建一个 check-in() 函数,当客户归还一部影片时,将该影片从已租列 表中删除,同时添加到现有影片列表中。

function checkIn(name, movie, filmList, customerList, rentList) {
	if (rentList.contains(movie)) {
		rentList.remove(movie);
		filmList.append(movie);
		console.log(movie + " has been returned.\n");
		console.log("rent movies: \n");
		displayList(rentList);
		for (customerList.front(); customerList.currPos() < customerList.length(); customerList.next()) {
			if (customerList.getElement().movie == movie) {
				customerList.remove(customerList.getElement());
			}
		}
		console.log("\nCustomer Rentals: \n");
		displayList(customers);
	} else {
		console.log(movie + " is not rented.\n");
	}
}

List不是JavaScript的内置类型,记录一下数组实现的List对象:


function List() { 
	this.listSize = 0; 
	this.pos = 0; 
	this.dataStore = []; 
	this.clear = clear; 
	this.find = find; 
	this.toString = toString; 
	this.insert = insert; 
	this.append = append; 
	this.remove = remove; 
	this.front = front; 
	this.end = end; 
	this.prev = prev; 
	this.next = next; 
	this.length = length; 
	this.currPos = currPos; 
	this.moveTo = moveTo; 
	this.getElement = getElement; 
	this.length = length; 
	this.contains = contains; 
	this.insertIfGreaterThanAll = insertIfGreaterThanAll;
	this.insertIfLessThanAll = insertIfLessThanAll;
}

function append(element) { 
	this.dataStore[this.listSize++] = element; 
}
function find(element) { 
	for (var i = 0; i < this.dataStore.length; ++i) { 
		if (this.dataStore[i] == element) { 
			return i; 
		} 
	} 
	return -1; 
}
function remove(element) { 
	var foundAt = this.find(element); 
	if (foundAt > -1) { 
		this.dataStore.splice(foundAt,1); 
		--this.listSize; 
		return true; 
	} 
	return false; 
}
function length() { 
	return this.listSize; 
}
function toString() { 
	return this.dataStore; 
}
function insert(element, after) { 
	var insertPos = this.find(after); 
	if (insertPos > -1) { 
		this.dataStore.splice(insertPos+1, 0, element); 
		++this.listSize; 
		return true; 
	} 
	return false; 
}
function clear() { 
	delete this.dataStore; 
	this.dataStore = []; 
	this.listSize = this.pos = 0; 
}
function contains(element) { 
	for (var i = 0; i < this.dataStore.length; ++i) { 
		if (this.dataStore[i] == element) { 
		//if (this.dataStore[i].indexOf(element) >= 0) { 
			return true; 
		} 
	} 
	return false; 
}
function front() { 
	this.pos = 0; 
} 
 
function end() { 
	this.pos = this.listSize-1; 
} 
 
function prev() { 
	if (this.pos > 0) { 
		--this.pos; 
	} 
} 
 
function next() { 
//	if (this.pos < this.listSize-1) { 
		++this.pos; 
//	} 
} 
 
function currPos() { 
	return this.pos; 
} 
 
function moveTo(position) { 
	this.pos = position; 
} 
 
function getElement() { 
	return this.dataStore[this.pos]; 
}

function isGreaterThan(a, b) {
	if (typeof a === 'number' && typeof b === 'number') {
		return a > b;
	} else if (typeof a === 'string' && typeof b === 'string') {
		return a.localeCompare(b) > 0;
	} else {
		throw new Error('Unsupported data type');
	}
}

function isLessThan(a, b) {
	if (typeof a === 'number' && typeof b === 'number') {
		return a < b;
	} else if (typeof a === 'string' && typeof b === 'string') {
		return a.localeCompare(b) < 0;
	} else {
		throw new Error('Unsupported data type');
	}
}

function insertIfGreaterThanAll(element) {
	for (var i = 0; i < this.dataStore.length; i++) {
		if (!isGreaterThan(element, this.dataStore[i])) {
			return false;
		}
	}
	this.append(element);
	return true;
}

function insertIfLessThanAll(element) {
	for (var i = 0; i < this.dataStore.length; i++) {
		if (!isLessThan(element, this.dataStore[i])) {
			return false;
		}
	}
	this.append(element);
	return true;
}







var films = "The Shawshank Redemption(《肖申克的救赎》)                    \n\
	The Godfather(《教父》)                                                   \n \
	The Godfather: Part II(《教父 2》)                                         \n\
	Pulp Fiction(《低俗小说》)                                                 \n\
	The Good, the Bad and the Ugly(《黄金三镖客》)                             \n\
	12 Angry Men(《十二怒汉》 )                                                \n\
	Schindler’s List(《辛德勒名单》)                                           \n\
	The Dark Knight(《黑暗骑士》)                                              \n\
	The Lord of the Rings: The Return of the King(《指环王:王者归来》)        \n\
	Fight Club(《搏击俱乐部》)                                                \n\
	Star Wars: Episode V - The Empire Strikes Back(《星球大战 5:帝国反击战》)\n\
	One Flew Over the Cuckoo’s Nest(《飞越疯人院》)                           \n\
	The Lord of the Rings: The Fellowship of the Ring(《指环王:护戒使者》)   \n\
	Inception(《盗梦空间》)                                                   \n\
	Goodfellas(《好家伙》)                                                    \n\
	Star Wars(《星球大战》)                                                   \n\
	Seven Samurai(《七武士》)                                                 \n\
	The Matrix(《黑客帝国》)                                                  \n\
	Forrest Gump(《阿甘正传》)                                                \n\
	City of God(《上帝之城》)                                                 \n"
function createArr(file) {
	var arr = file.split("\n");
	for (var i = 0; i < arr.length; i++) {
		arr[i] = arr[i].trim();
	}
	return arr;
}
function Customer(name, movie) {
	this.name = name;
	this.movie = movie;
}
function checkOut(name, movie, filmList, customerList, rentList) {
	if (filmList.contains(movie)) {
		var c = new Customer(name, movie);
		customerList.append(c);
		rentList.append(movie);
		filmList.remove(movie);
		console.log("Rented movies: ");
        displayList(rentList);
	} else {
		console.log(movie + " is not available.");
	}
}
function checkIn(name, movie, filmList, customerList, rentList) {
	if (rentList.contains(movie)) {
		rentList.remove(movie);
		filmList.append(movie);
		console.log(movie + " has been returned.\n");
		console.log("rent movies: \n");
		displayList(rentList);
		for (customerList.front(); customerList.currPos() < customerList.length(); customerList.next()) {
			if (customerList.getElement().movie == movie) {
				customerList.remove(customerList.getElement());
			}
		}
		console.log("\nCustomer Rentals: \n");
		displayList(customers);
	} else {
		console.log(movie + " is not rented.\n");
	}
}
function displayList(list) {
	for (list.front(); list.currPos() < list.length(); list.next()) {
		if (list.getElement() instanceof Customer) {
			console.log(list.getElement()["name"] + ", " + list.getElement()["movie"]);
		} else {
			console.log(list.getElement());
		}
	}
}

var movies = createArr(films);
var movieList = new List();
var customers = new List();
var rentList = new List();
for (var i = 0; i < movies.length; i++) {
	movieList.append(movies[i]);
}
console.log("Available movies: \n");
displayList(movieList);
checkOut("Jane Doe", "The Godfather(《教父》)", movieList, customers, rentList);
console.log("\nCustomer Rentals: \n");
displayList(customers);
console.log("\nAvailable movies: \n");
displayList(movieList);
console.log("\n-----------------------------------------------------\n");
checkIn("Jane Doe", "The Godfather(《教父》)", movieList, customers, rentList);
console.log("Available movies: \n");
displayList(movieList);

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

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

相关文章

MR30系列IO——工业自动化的智慧纽带

一、引言 在工业自动化技术的广阔天地中&#xff0c;MR30系列IO模块、数字量模块以及模拟量模块构成了控制系统的核心基石。它们被广泛应用于可编程逻辑控制器&#xff08;PLC&#xff09;、分布式控制系统&#xff08;DCS&#xff09;等多种自动化系统中&#xff0c;为工业生…

安卓13屏蔽蓝牙匹配对话框 自动匹配 android13屏蔽蓝牙匹配对话框 自动匹配

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 设置 蓝牙连接的时候,会有匹配对话框提示。我们来实现自动配对。 2.问题分析 这里我们是通过点击操作来实现功能的,所以我们思路可以是自动点击功能的实现。 3.代码分…

笔记||VUE3

侦听器 | Vue.js (vuejs.org) 模板引用 | Vue.js (vuejs.org)

Java 对接485协议数据基于jSerialComm库

Java 对接 485 协议数据的科普 一&#xff1a;引言 485协议&#xff0c;通常指的是RS-485&#xff0c;它是一种用于长距离通信的标准电气接入规范。由于其优越的抗干扰能力和较长的通信距离&#xff0c;RS-485在工业自动化、楼宇控制等领域得到了广泛应用。本篇文章将介绍如何…

基于Springboot+vue的漫画网站

一、系统架构 前端&#xff1a;vue | element-ui | html 后端&#xff1a;springboot | mybatis-plus 环境&#xff1a;jdk1.8 | mysql | maven | nodejs 二、代码及数据库 三、功能介绍 01. web端-首页1 02. web端-首页2 03. web端-登录 04. web端-注册 05. w…

免费分享:中国县级居民点

数据详情 1:100万中国县级居民点矢量数据 数据属性 数据名称&#xff1a;1:100万中国县级居民点矢量数据 数据时间&#xff1a;2010年之前 空间位置&#xff1a;全国 数据格式&#xff1a;Shp矢量 空间分辨率&#xff1a;- 坐标系&#xff1a;WGS1984 下载方法 打开数字…

5款人声分离免费软件分享,从入门到精通,伴奏提取分分钟拿捏!

人声分离通常是音乐制作、混音和卡拉OK中常用的重要技术之一。它的核心是将乐器伴奏从原始音轨中分离出来&#xff0c;使得用户可以单独处理或重混音频&#xff0c;创造出清晰干净的伴奏轨道。若缺乏强大的音频剪辑软件或专业人声分离工具&#xff0c;这一过程往往会比较困难。…

npm ERR! PhantomJS not found on PATH

安装phantomj时发生报错 old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. npm ERR! code 1 npm ERR! path /va…

2024年【四川省安全员B证】新版试题及四川省安全员B证试题及解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【四川省安全员B证】新版试题及四川省安全员B证试题及解析&#xff0c;包含四川省安全员B证新版试题答案和解析及四川省安全员B证试题及解析练习。安全生产模拟考试一点通结合国家四川省安全员B证考试最新大纲及…

[linux 驱动]网络设备驱动详解

目录 1 描述 2 结构体 2.1 net_device 2.2 sk_buff 2.3 net_device_ops 2.4 ethtool_ops 3 相关函数 3.1 网络协议接口层 3.1.1 dev_queue_xmit 3.1.2 netif_rx 3.1.3 alloc_skb 3.1.4 kfree_skb 3.1.5 skb_put 3.1.6 skb_push 3.1.7 skb_reserve 3.2 网络设备驱…

Meilisearch 和 Ollama 实现文本向量搜索

Meilisearch 是一个开源、快速、简洁的全文搜索引擎&#xff0c;专为构建高性能、实时的搜索功能而设计。其主要特点如下&#xff1a; 极速搜索&#xff1a;Meilisearch 使用反向索引来加速搜索查询&#xff0c;因此能够在海量数据中提供毫秒级的响应时间&#xff0c;尤其适合实…

SPSS 分类模型实训步骤 (以 Logistic 回归为例)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

VBA即用型代码手册:将工作表复制到已关闭的工作簿

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率&#xff0c;而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。 作为我的学员要利用我的积木编程思想&#xff0c;积木编程最重要的是积木如何搭建…

接口inference

定义&#xff1a; 接口是用来被类实现的&#xff0c;实现接口的类称为实现类。实现类可以理解成所谓的子类 一个类实现接口&#xff0c;必须重写完全部接口的全部抽象方法&#xff0c;否则这个类需要定义成抽象类。 接口多继承的作用&#xff1a;规范合并&#xff0c;整合多个接…

YOLO11改进|注意力机制篇|引入局部注意力HaloAttention

目录 一、【HaloAttention】注意力机制1.1【HaloAttention】注意力介绍1.2【HaloAttention】核心代码 二、添加【HaloAttention】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【HaloAttention】注意力机制 1.1【HaloAttent…

基于组合模型的公交交通客流预测研究

摘 要 本研究致力于解决公交客流预测问题&#xff0c;旨在通过融合多种机器学习模型的强大能力&#xff0c;提升预测准确性&#xff0c;为城市公交系统的优化运营和交通管理提供科学依据。研究首先回顾了公交客流预测领域的相关文献&#xff0c;分析了传统统计方法在处理大规…

企业大文件传输之:镭速如何提升上传文件浏览器压缩效率?

互联网技术的迅猛发展带来了文件传输需求的激增&#xff0c;尤其是在需要在浏览器中上传大文件的场景下。为了提升传输效率并减少服务器的带宽和资源消耗&#xff0c;文件压缩变得尤为重要。许多开发者选择使用JSZip等开源工具来实现浏览器端的文件压缩。 不过&#xff0c;这些…

运动耳机选哪个品牌比较好?盘点五大高品质运动耳机推荐!

在骨传导耳机日益普及的同时&#xff0c;一个不容忽视的问题也逐渐暴露在大众视野之中。根据可靠消息&#xff0c;有超过九成的运动爱好者反馈在使用骨传导耳机时感到佩戴不适&#xff01;作为一名有着5年经验的运动达人&#xff0c;我秉持着对消费者负责的态度&#xff0c;同时…

LLM 何时需要检索增强? 减轻 LLM 的过度自信有助于检索增强

洞见 检索增强&#xff08;RA&#xff09;技术作为减轻大语言模型&#xff08;LLMs&#xff09;幻觉问题的一种手段&#xff0c;已经受到了广泛的关注。然而&#xff0c;由于其带来的额外计算成本以及检索结果质量的不确定性&#xff0c;持续不断地应用RA并非总是最优的解决方…

【Python】Conda离线执行命令

以下链接证明了想要离线使用conda命令的方法 启用离线模式 — Anaconda documentation 基本上大部分的命令都会提供网络选项 例如creat命令 conda create — conda 24.7.1 文档 - Conda 文档