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语言的链表实现(增删改查),并且使用控制台输入输出的更多相关文章

  1. 关于单链表的增删改查方法的递归实现(JAVA语言实现)

    因为在学习数据结构,准备把java的集合框架底层源码,好好的过一遍,所以先按照自己的想法把单链表的类给写出来了; 写该类的目的: 1.练习递归 2.为深入理解java集合框架底层源码打好基础 学习的视 ...

  2. Go 语言 切片的使用(增删改查)

    Go 语言 切片的使用(增删改查) 引言Golang 的数组是固定长度,可以容纳相同数据类型的元素的集合.但是当长度固定了,在使用的时候肯定是会带来一些限制,比如说:申请的长度太大会浪费内存,太小又不 ...

  3. Java描述数据结构之链表的增删改查

    链表是一种常见的基础数据结构,它是一种线性表,但在内存中它并不是顺序存储的,它是以链式进行存储的,每一个节点里存放的是下一个节点的"指针".在Java中的数据分为引用数据类型和基础 ...

  4. 史上最全单链表的增删改查反转等操作汇总以及5种排序算法(C语言)

    目录 1.准备工作 2.创建链表 3.打印链表 4.在元素后面插入元素 5.在元素前面增加元素 6.删除链表元素,要注意删除链表尾还是链表头 7.根据传入的数值查询链表 8.修改链表元素 9.求链表长 ...

  5. Java实现单向链表的增删改查

    class List<T> { private class Node { private T data; private Node next; private Node(T data) { ...

  6. javascript 原生js对html元素的 增删改查 操作

    'use strict'; class View{ constructor(){ } //创建html元素 addEl(fel, elemName, id, cls){ //创建一个元素 let el ...

  7. (网页)javaScript增删改查(转)

    转自CSDN: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> ...

  8. 招新系统(jsp+servlet,实现简略前端网页注册登录+后台增删改查,分学生和管理员,Java语言,mysql数据库连接,tomcat服务器)

    生活不只是眼前的苟且,还有诗和远方. 架构说明: 要求是采用MVC模式,所以分了下面的几个包,但是由于是第一次写,可能分的也不是很清楚: 这个是后台部分的架构: 这个是前端的的展示: (那个StuLo ...

  9. JavaScript HTML DOM增删改查

    首先 js 可以修改HTML中的所有元素和属性,它还可以改变CSS样式,并且可以监听到所有事件并作出响应,这篇笔记呢 主要记录如何对HTML元素进行增删改查. 1 查找DOM 第一种方式是我们最常用的 ...

随机推荐

  1. Storm系列(十八)事务介绍

    功能:将多个tuple组合成为一个批次,并保障每个批次的tuple被且仅被处理一次. storm事务处理中,把一个批次的tuple的处理分为两个阶段processing和commit阶段. proce ...

  2. POJ3750: 小孩报数问题+一道经典约瑟夫问题(猴子选大王)

    又一次因为一个小错误,POJ上Wrong Answer了无数次..... 在差不多要放弃的时候,发现了这个猥琐的不能再猥琐的bug,改完了提交就AC了,简直无语.... 本题wo采用模拟方法: 1 # ...

  3. php学习小记2 类与对象

    php类的一些特性: 1. 伪变量$this.$this是一个到主叫对象的引用.取值:该方法所从属的对象,可能是另外的对象(前提,当该方法被静态调用时).$this变量存在于一个类的非静态方法中,在静 ...

  4. 从app里跳到appstore评论页面的实现

    // 如果要实现在应用里面跳到appstore的对应评论页面里面的话,只要将下面地址中App_ID替换成自己的id就可以了,其他的地方都不用管. // 如果要用Safari浏览器做实验的话可以将地址中 ...

  5. 自己修改select的样式(修改select右边的小三角)

    CSS就可以解决,原理是将浏览器默认的下拉框样式清除,然后应用上自己的,再附一张向右对齐小箭头的图片即可. select { /*Chrome和Firefox里面的边框是不一样的,所以复写了一下*/ ...

  6. php排序之冒泡排序

    冒泡排序比较简单.作为很多公司面试笔试题常常出现,要求手写该排序算法.双层循环,不断的与后面的比较,如果大于后面的,调换两者顺序即可. 演示效果如图: 代码如下: <?php function ...

  7. mysql 不支持innodb的问题解决

    在新的机器上安装了mysql后,发现里面新创建的数据表的存储引擎都是myisam,于是 执行下面语句,把mysiam改为innodb. alter table tbl_test engine=inno ...

  8. GridControl 复合表头(多行标题)

    说明: 最好是通过编辑视图进行设计,后台编码有点麻烦. 例图:(上面的GC是后台编写 ,下面的是设计器设计) 后台代码编写: public void InitCtrl() { DevExpress.X ...

  9. 聊聊LAA(LARGE ADDRESS AWARE)

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:聊聊LAA(LARGE ADDRESS AWARE).

  10. Cocos2d-x 2.0 自适应多种分辨率

    转自:http://dualface.github.io/blog/2012/08/17/cocos2d-x-2-dot-0-multi-resolution/ cocos2d-x 2.0 提供一个极 ...