Js新手最近在研究Js数据结构,刚好看到链表实现这一块儿,觉得有些资料和自己理解的有冲突,于是借着自己以前一点点C语言的基础,用Javascript模仿了C的链表实现,并且用了process.stdin和process.stdout的控制台输入输出。祝贺新手第一次发帖。哈哈哈。

代码如下:

LinkList_node.js

  1. //节点类的构造函数
  2. function Node(element){
  3. this.element = element;
  4. this.next = null;
  5. }
  6. //链表类的构造函数
  7. function LList(){
  8. this.head = new Node("head");
  9. this.length = 0;
  10. }
  11. //查找某个位置为pos的元素并在控制台打印
  12. LList.prototype.find = function(pos){
  13. //检查边界
  14. if(pos < 0|| pos > this.length)
  15. return false;
  16.  
  17. var querynode = new Node();
  18. //遍历到pos位置
  19. for(var i = 0,querynode = this.head;i < pos;i++){
  20. querynode = querynode.next;
  21. }
  22. process.stdout.write(querynode.element.toString());
  23. }
  24. //在位置为pos的地方插入元素element
  25. LList.prototype.insert = function(element,pos){
  26. var newNode = new Node(element);
  27. var querynode = new Node();
  28. //检查边界
  29. if(pos < 0|| pos > this.length)
  30. return false;
  31. //插入头部
  32. if(pos == 0){
  33. newNode.next = this.head.next;
  34. this.head.next = newNode;
  35. }
  36. //插入尾部
  37. else if(pos == this.length){
  38. querynode = this.head;
  39. for(var i = 0;i < this.length;i++){
  40. querynode = querynode.next;
  41. }
  42. querynode.next = newNode;
  43. newNode.next = null;
  44. }
  45. //插入中间
  46. else{
  47. querynode = this.head;
  48. for(var i = 0;i < pos;i++){
  49. querynode = querynode.next;
  50. }
  51. newNode.next = querynode.next;
  52. querynode.next = newNode;
  53. }
  54. //链表长度加1
  55. this.length++;
  56. }
  57. //删除位置为pos的元素
  58. LList.prototype.remove = function(pos){
  59. var querynode = new Node();
  60. //遍历到pos位置的前一个元素
  61. for(var i = 0,querynode = this.head;i < pos-1;i++){
  62. querynode = querynode.next;
  63. }
  64. //将前一个元素的next指向下一个的下一个元素,也就是跳过了中间那个元素
  65. querynode.next = querynode.next.next;
  66. //链表长度减1
  67. this.length--;
  68. }
  69. //把位置为pos的元素值修改为element
  70. LList.prototype.modify = function(pos,element){
  71. //检查边界
  72. if(pos < 0|| pos > this.length)
  73. return false;
  74.  
  75. var querynode = new Node();
  76. //查找到pos位置
  77. for(var i = 0,querynode = this.head;i < pos;i++){
  78. querynode = querynode.next;
  79. }
  80. //修改元素值
  81. querynode.element = element;
  82. }
  83. //遍历并且输出链表元素的值
  84. LList.prototype.display = function(){
  85. var querynode = new Node();
  86. for(var i = 0,querynode = this.head;i < this.length;i++){
  87. querynode = querynode.next;
  88. //使用process.stdout从控制台输出
  89. process.stdout.write(querynode.element.toString());
  90. }
  91. }
  92. //以下是测试程序
  93. var mylist = new LList();
  94. console.log("请输入数据:");
  95. //使用process.stdin从控制台输入
  96. process.stdin.on("data",function(element){
  97. var arr = element.toString().split(",");
  98. mylist.insert(arr[0],arr[1]);
  99. mylist.insert(2,0);
  100. mylist.insert(3,0);
  101. mylist.insert(4,0);
  102. mylist.insert(5,0);
  103. console.log("链表元素为:")
  104. mylist.display();
  105. console.log();
  106. console.log("查找位置2的元素为:")
  107. mylist.find(2);
  108. console.log();
  109. console.log("删除位置为1:")
  110. mylist.remove(1);
  111. mylist.display();
  112. console.log();
  113. console.log("修改位置为1的元素为9:")
  114. mylist.modify(2,9);
  115. mylist.display();
  116. console.log();
  117. });

测试结果如下:

从控制台输入的是字符串"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. nyoj 找球号三(除了一个数个数为基数,其他为偶数,编程之美上的)

    #include<iostream> #include<stdio.h> using namespace std; int main() { int len; while(ci ...

  2. Windows Azure 的磁盘管理相关概念

    在 Windows Azure 的虚拟机中,磁盘有多种使用方式.操作系统磁盘是用来为虚拟机提供操作系统的虚拟硬盘.数据磁盘是附加到虚拟机上用来存储应用程序数据的 VHD. 根据应用程序的需要,可从多种 ...

  3. 活用maven使web.xml可以用maven变量

    活用maven使web.xml可以用maven变量 废话不多说,直接上代码 <build> <finalName>${finalWarName}</finalName&g ...

  4. HDOJ-ACM2035(JAVA) 人见人爱A^B

    这道题的巧妙方法没有想出来,但是算是优化的暴力破解吧.Accepted import java.io.BufferedInputStream; import java.util.Scanner; pu ...

  5. 最常用的Java库一览

    本文由 ImportNew - 邢 敏 翻译自 programcreek.欢迎加入翻译小组.转载请见文末要求. 写在前面: 1) 本文列出的名单是根据我自己的调查,并结合个人的经验.有可能是它们不恰恰 ...

  6. Altium Designer 多通道设计

    转chenzelin2009的csdn博客:http://blog.csdn.net/chenzelin2009/article/details/5751251# Altium Designer的多图 ...

  7. 在触屏设备中拖动 overflow 元素

    在 Android 和 iOS 等触屏设备中,如果网页中某元素设置 overflow: auto 或者 overflow:scroll,那么问题就来了.在 Android 3.0 之前以及 iPhon ...

  8. String的点点滴滴

    一.String 的 equals()到底比较的是什么?equals() 与 == 的区别? 当使用关系运算符==比较两个对象时,是比较两个对象使用的内存地址和内容是否相同,如果两个对象使用的是同一个 ...

  9. spring websocket Converters must not be empty

    此文件    WebSocketConfig.java public class WebSocketConfig implements WebSocketMessageBrokerConfigurer ...

  10. 图像处理界的标准图像Lena背后的故事

    今天晚上实验室的哥们问到我:“蒋志强,你知道咱们数字图像处理界标准图像Lena吗?” “当然知道啊,不就是那个512×512的美丽姐姐的标准图像么?”我不以为然的回答: “那幅图像事实上不是原始图像? ...