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 第一种方式是我们最常用的 ...
随机推荐
- HDOJ-ACM1020(JAVA)
题意:给字母计数,如果是字母后面没有相同的,原样输出,如果有则输出这个字母的个数和字母本身. import java.util.*; import java.io.*; public class Ma ...
- HDU4737 - A Bit Fun(线段树)
题目大意 给你一个数组a,定义f(i,j)=ai|ai+1|ai+2|⋯|aj ,|为or运算,求满足f(i,j)<m的二元组个数,N≤105,m≤230 题解 枚举起点i,然后找出最靠右的k, ...
- Yii 图片FTP批量上传 并生成缩略图
图片批量上传,前台使用 uploadify.swf,这个就不介绍了.这里使用两个扩展,一个是FTP上传的扩展,还有一个是生成缩略图的扩展地址:http://www.yiiframework.com/e ...
- hdoj 1898 Sempr == The Best Problem Solver?
Sempr == The Best Problem Solver? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/3276 ...
- Python队列服务 Python RQ Functions from the __main__ module cannot be processed by workers.
在使用Python队列服务 Python RQ 时候的报错: Functions from the __main__ module cannot be processed by workers. 原因 ...
- java.lang.UnsupportedClassVersionError: Unsupported major.minor version 52.0的错误
1.首先检查是不是jdk版本过低,如果过低的话就把jdk重新安装一下 2.在编译器的版本中设置一下,compiler中设置成与jdk版本相同
- 后台JOB&EVENT JOB
SM35执行一个后台作业后,想及时停止, 运行SM37后,点击ctr + F1停止活动的作业,系统根本就没反应. 解决方法: 第一步:SM50, 找到,Ty.列为BGD的(Background),然后 ...
- [转帖] 安装Eclipse插件长时间卡在 calculating requirements and dependencies
把"Contact all update sites during install to find required software"前面的勾去掉,然后点击下一步,这样之后问题迎 ...
- Win7与虚拟机VMware下运行的Ubuntu共享文件夹
安装VMware Tools,在VMware面板上选择“虚拟机-重新安装VMware tools…”,如下图所示: 在这里VMware虚拟了一个光盘镜像,我们需要把这个镜像挂载到本机的/mnt目录下面 ...
- jquery ajax异步加载table的方法
//显示详细信息 function showInfo(actionId, type) { $.post("Sys_Ajax/Sys_EmployInfo.ashx", { &quo ...