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 第一种方式是我们最常用的 ...
随机推荐
- nyoj 找球号三(除了一个数个数为基数,其他为偶数,编程之美上的)
#include<iostream> #include<stdio.h> using namespace std; int main() { int len; while(ci ...
- Windows Azure 的磁盘管理相关概念
在 Windows Azure 的虚拟机中,磁盘有多种使用方式.操作系统磁盘是用来为虚拟机提供操作系统的虚拟硬盘.数据磁盘是附加到虚拟机上用来存储应用程序数据的 VHD. 根据应用程序的需要,可从多种 ...
- 活用maven使web.xml可以用maven变量
活用maven使web.xml可以用maven变量 废话不多说,直接上代码 <build> <finalName>${finalWarName}</finalName&g ...
- HDOJ-ACM2035(JAVA) 人见人爱A^B
这道题的巧妙方法没有想出来,但是算是优化的暴力破解吧.Accepted import java.io.BufferedInputStream; import java.util.Scanner; pu ...
- 最常用的Java库一览
本文由 ImportNew - 邢 敏 翻译自 programcreek.欢迎加入翻译小组.转载请见文末要求. 写在前面: 1) 本文列出的名单是根据我自己的调查,并结合个人的经验.有可能是它们不恰恰 ...
- Altium Designer 多通道设计
转chenzelin2009的csdn博客:http://blog.csdn.net/chenzelin2009/article/details/5751251# Altium Designer的多图 ...
- 在触屏设备中拖动 overflow 元素
在 Android 和 iOS 等触屏设备中,如果网页中某元素设置 overflow: auto 或者 overflow:scroll,那么问题就来了.在 Android 3.0 之前以及 iPhon ...
- String的点点滴滴
一.String 的 equals()到底比较的是什么?equals() 与 == 的区别? 当使用关系运算符==比较两个对象时,是比较两个对象使用的内存地址和内容是否相同,如果两个对象使用的是同一个 ...
- spring websocket Converters must not be empty
此文件 WebSocketConfig.java public class WebSocketConfig implements WebSocketMessageBrokerConfigurer ...
- 图像处理界的标准图像Lena背后的故事
今天晚上实验室的哥们问到我:“蒋志强,你知道咱们数字图像处理界标准图像Lena吗?” “当然知道啊,不就是那个512×512的美丽姐姐的标准图像么?”我不以为然的回答: “那幅图像事实上不是原始图像? ...