Javascript模仿C语言的链表实现(增删改查),并且使用控制台输入输出
Js新手最近在研究Js数据结构,刚好看到链表实现这一块儿,觉得有些资料和自己理解的有冲突,于是借着自己以前一点点C语言的基础,用Javascript模仿了C的链表实现,并且用了process.stdin和process.stdout的控制台输入输出。祝贺新手第一次发帖。哈哈哈。
代码如下:
LinkList_node.js
//节点类的构造函数
function Node(element){
this.element = element;
this.next = null;
}
//链表类的构造函数
function LList(){
this.head = new Node("head");
this.length = 0;
}
//查找某个位置为pos的元素并在控制台打印
LList.prototype.find = function(pos){
//检查边界
if(pos < 0|| pos > this.length)
return false; var querynode = new Node();
//遍历到pos位置
for(var i = 0,querynode = this.head;i < pos;i++){
querynode = querynode.next;
}
process.stdout.write(querynode.element.toString());
}
//在位置为pos的地方插入元素element
LList.prototype.insert = function(element,pos){
var newNode = new Node(element);
var querynode = new Node();
//检查边界
if(pos < 0|| pos > this.length)
return false;
//插入头部
if(pos == 0){
newNode.next = this.head.next;
this.head.next = newNode;
}
//插入尾部
else if(pos == this.length){
querynode = this.head;
for(var i = 0;i < this.length;i++){
querynode = querynode.next;
}
querynode.next = newNode;
newNode.next = null;
}
//插入中间
else{
querynode = this.head;
for(var i = 0;i < pos;i++){
querynode = querynode.next;
}
newNode.next = querynode.next;
querynode.next = newNode;
}
//链表长度加1
this.length++;
}
//删除位置为pos的元素
LList.prototype.remove = function(pos){
var querynode = new Node();
//遍历到pos位置的前一个元素
for(var i = 0,querynode = this.head;i < pos-1;i++){
querynode = querynode.next;
}
//将前一个元素的next指向下一个的下一个元素,也就是跳过了中间那个元素
querynode.next = querynode.next.next;
//链表长度减1
this.length--;
}
//把位置为pos的元素值修改为element
LList.prototype.modify = function(pos,element){
//检查边界
if(pos < 0|| pos > this.length)
return false; var querynode = new Node();
//查找到pos位置
for(var i = 0,querynode = this.head;i < pos;i++){
querynode = querynode.next;
}
//修改元素值
querynode.element = element;
}
//遍历并且输出链表元素的值
LList.prototype.display = function(){
var querynode = new Node();
for(var i = 0,querynode = this.head;i < this.length;i++){
querynode = querynode.next;
//使用process.stdout从控制台输出
process.stdout.write(querynode.element.toString());
}
}
//以下是测试程序
var mylist = new LList();
console.log("请输入数据:");
//使用process.stdin从控制台输入
process.stdin.on("data",function(element){
var arr = element.toString().split(",");
mylist.insert(arr[0],arr[1]);
mylist.insert(2,0);
mylist.insert(3,0);
mylist.insert(4,0);
mylist.insert(5,0);
console.log("链表元素为:")
mylist.display();
console.log();
console.log("查找位置2的元素为:")
mylist.find(2);
console.log();
console.log("删除位置为1:")
mylist.remove(1);
mylist.display();
console.log();
console.log("修改位置为1的元素为9:")
mylist.modify(2,9);
mylist.display();
console.log();
});
测试结果如下:
从控制台输入的是字符串"1,0"
Javascript模仿C语言的链表实现(增删改查),并且使用控制台输入输出的更多相关文章
- 关于单链表的增删改查方法的递归实现(JAVA语言实现)
因为在学习数据结构,准备把java的集合框架底层源码,好好的过一遍,所以先按照自己的想法把单链表的类给写出来了; 写该类的目的: 1.练习递归 2.为深入理解java集合框架底层源码打好基础 学习的视 ...
- Go 语言 切片的使用(增删改查)
Go 语言 切片的使用(增删改查) 引言Golang 的数组是固定长度,可以容纳相同数据类型的元素的集合.但是当长度固定了,在使用的时候肯定是会带来一些限制,比如说:申请的长度太大会浪费内存,太小又不 ...
- Java描述数据结构之链表的增删改查
链表是一种常见的基础数据结构,它是一种线性表,但在内存中它并不是顺序存储的,它是以链式进行存储的,每一个节点里存放的是下一个节点的"指针".在Java中的数据分为引用数据类型和基础 ...
- 史上最全单链表的增删改查反转等操作汇总以及5种排序算法(C语言)
目录 1.准备工作 2.创建链表 3.打印链表 4.在元素后面插入元素 5.在元素前面增加元素 6.删除链表元素,要注意删除链表尾还是链表头 7.根据传入的数值查询链表 8.修改链表元素 9.求链表长 ...
- Java实现单向链表的增删改查
class List<T> { private class Node { private T data; private Node next; private Node(T data) { ...
- javascript 原生js对html元素的 增删改查 操作
'use strict'; class View{ constructor(){ } //创建html元素 addEl(fel, elemName, id, cls){ //创建一个元素 let el ...
- (网页)javaScript增删改查(转)
转自CSDN: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> ...
- 招新系统(jsp+servlet,实现简略前端网页注册登录+后台增删改查,分学生和管理员,Java语言,mysql数据库连接,tomcat服务器)
生活不只是眼前的苟且,还有诗和远方. 架构说明: 要求是采用MVC模式,所以分了下面的几个包,但是由于是第一次写,可能分的也不是很清楚: 这个是后台部分的架构: 这个是前端的的展示: (那个StuLo ...
- JavaScript HTML DOM增删改查
首先 js 可以修改HTML中的所有元素和属性,它还可以改变CSS样式,并且可以监听到所有事件并作出响应,这篇笔记呢 主要记录如何对HTML元素进行增删改查. 1 查找DOM 第一种方式是我们最常用的 ...
随机推荐
- [九度OJ]1008.最短路径问题
原题链接:http://ac.jobdu.com/problem.php?pid=1008 题目描述: 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离 ...
- vijosP1092 全排列
vijosP1092 全排列 链接:https://vijos.org/p/1092 [思路] 数学+搜索. 根据序号依次确定每一个数. 首先我们可以把未选的数看作一个可选择集合,其次把寻找过程看作一 ...
- ubuntu usb权限问题解决
在/etc/udev/rules.d/ 创建51-android.rules SUBSYSTEM==" SUBSYSTEM=="
- POJ1811- Prime Test(Miller–Rabin+Pollard's rho)
题目大意 给你一个非常大的整数,判断它是不是素数,如果不是则输出它的最小的因子 题解 看了一整天<初等数论及其应用>相关部分,终于把Miller–Rabin和Pollard's rho这两 ...
- POJ1423 - Big Number(Stirling公式)
题目大意 求N!有多少位 题解 用公式直接秒杀... 代码: #include<iostream> #include<cmath> using namespace std; # ...
- c语言 字符版 简易2048
花了两个多小时,用最蠢的方法写的……最简陋版…… 还不确定这么写逻辑对不对…… #include <iostream> #include <cstdio> #include & ...
- 高效Linux用户需要了解的命令行技能
最近在Quora上看到一个问答题目,关于在高效率Linux用户节省时间Tips. 将该题目的回答进行学习总结,加上自己的一些经验,记录如下,方便自己和大家参考. 下面介绍的都是一些命令行工具,这些工具 ...
- LLVM在静态分析上的增强 @ WWDC 2013
在代码还没有真正跑起来的时候,可以利用Clang对代码进行静态分析. 1. 可以应用快捷键Shift+Command+B对项目代码进行分析: 2. 也可以针对某个文件进行分析(现有版本貌似不能针对特定 ...
- jsp页面转发到servlet
一个简单的例子来了解一下jsp页面转发到servlet的过程,环境 eclipse.tomcat 1.工程目录结构如下 2.各部分代码如下 1>index.jsp <%@ page lan ...
- SVProgressHUD 用法
SVProgressHUD 是一个第三方的控件,是一个弹出提示层,用来提示 网络加载 或 提示对错,看下面图,你就明白了: 那么,SVProgressHUD 都有什么特点呢: 1. 提示当 ...