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 第一种方式是我们最常用的 ...
随机推荐
- Html笔记(六)超链接
超链接标签: <a> 两种用法: 一.超链接 <a href=""> 例: <a href="http://www.sina.com.cn& ...
- java中字符串切割的方法总结
StringTokenizer最快 ,基本已经不用了,除非在某些需要效率的场合.Scanner最慢. String和Pattern速度差不多.Pattern稍快些. String和Pattern的sp ...
- 集成电路中的assert和deassert应该如何翻译?
转载自:http://m.blog.csdn.net/blog/code_robot/37663085 我每次看到电路中的assert与deassert时,总是感觉别扭,因为词典翻译总是"断 ...
- 【Java基础】泛型的一些总结
什么是泛型 泛型其实可以理解为一种广泛的类型,啥类型都型,当然,这种泛是指定义时可以广泛,但是使用时必须确定类型.也就是说,当不清楚未来使用哪种类型时,定义为泛型.可以支持泛型类,泛型接口,泛型方法, ...
- ios中的容器类 ViewController
https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/AboutViewContro ...
- 解决android锁屏或解锁后activity重启的问题
If your target build version is Honeycomb 3.2 (API Level 13) or higher you must put the screenSize f ...
- mysql常见优化,更多mysql,Redis,memcached等文章
mysql常见优化 http://www.cnblogs.com/ggjucheng/archive/2012/11/07/2758058.html 更多mysql,Redis,memcached等文 ...
- Linux文件误删除恢复操作
作为一个多用户.多任务的操作系统,Linux下的文件一旦被删除,是难以恢复的.尽管删除命令只是在文件节点中作删除标记,并不真正清除文件内容,但是 其他用户和一些有写盘动作的进程会很快覆盖这些数据.不过 ...
- hdoj 5112 A Curious Matt
A Curious Matt Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others) ...
- (贪心5.1.2)POJ 2287 Tian Ji -- The Horse Racing
/* * POJ_2287.cpp * * Created on: 2013年10月9日 * Author: Administrator */ #include <iostream> #i ...