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 第一种方式是我们最常用的 ...
随机推荐
- Storm系列(五)架构分析之Nimbus启动过程
启动流程图 mk-assignments 功能:对当前集群中所有Topology进行新一轮的任务调度. 实现源码路径: \apache-storm-0.9.4\storm-core\src\clj ...
- 程序员需要掌握哪些IT技能
据Foote Partners的最新调查:如今,你掌握的 IT 技能的多少决定了你薪资的多少,但你不一定非要比开源架构师或Certified Secure Software Life Cycle Pr ...
- mongodb的高级操作(聚合框架)
group by 查询 不要用java驱动带的group by ,要用2.2版本后的aggregate聚合框架来搞,经过试验速度快一倍 参考 官网:http://docs.mongodb.org/ma ...
- mongodb的查询操作符
本文地址:http://www.cnblogs.com/egger/archive/2013/05/04/3059374.html 欢迎转载 ,请保留此链接! 官方参考: http://docs. ...
- [深入浅出Cocoa]详解键值观察(KVO)及其实现机理
一,前言 Objective-C 中的键(key)-值(value)观察(KVO)并不是什么新鲜事物,它来源于设计模式中的观察者模式,其基本思想就是: 一个目标对象管理所有依赖于它的观察者对象,并在它 ...
- void,extern,sizeof
高手潜规则:禁用goto 程序质量与goto出现次数成反比 void指针的意义 1.C语言规定只有相同类型的指针才可以相互赋值 2.void*指针作为坐值用于"接收"任意类型的指针 ...
- C#- 控制台Timer
很少在控制台上用定时器,最近要用到,百度了一遍文章.很不错,摘下来,作备忘 关于C#中timer类 在C#里关于定时器类就有3个 1.定义在System.Windows.Forms里 2.定义在Sys ...
- [转载](iPhone开发)Bundle Display Name 改为中文。ap
原文地址:(iPhone开发)Bundle Display Name 改为中文.app显示为中文作者:小新 要先在info的Localizations加入Chinese(zh-Hant) 再進到inf ...
- QT显示输出及其桌面
/* 应用程序桌面 */ QDesktopWidget* desktop = QApplication::desktop(); /* 指定显示器的屏幕尺寸(1024 * 768) */ QRect ...
- 正确的使用枚举(Enum)
状态与选项的区别(states and options) 在用enum之前,我个人觉得,区分一下状态和选项的概念还是很必要的. 状态,同时只能有一种,如“OK”,“Error”,不可能同时是OK和Er ...