JavaScript编程训练

一、前言

1、实验目的:

  • 熟悉JavaScript语法

2、实验内容:

  • 所有的代码存放在js文件中,并通过node.js来运行。

  • 制作一个链表list,实现链表的加入,删除,查询等操作。同时把该数据保存为json格式的文件;并能从文件读取到内存中;

二、环境

  1. 操作系统: Windows 10 X64
  2. 编辑器:VScode

三、实验步骤

  1. 配置环境:下载并安装Node.js,点击vscode中“调试”按钮,打开launch.json文件(或者使用Ctrl+Shift+P输入launch.json),在里面添加以下代码
"version": "0.2.0",
    "configurations": [{
            "name": "Launch",
            "type": "node",
            "request": "launch",
            "program": "${workspaceRoot}/1.js",
            "stopOnEntry": false,
            "args": [],
            "cwd": "${workspaceRoot}",
            "runtimeExecutable": null,
            "runtimeArgs": ["--nolazy"],
            "env": { "NODE_ENV": "development" },
            "externalConsole": false,
            "preLaunchTask": "",
            "sourceMaps": false,
            "outDir": null
        },
        {
            "name": "Attach",
            "type": "node",
            "request": "attach",
            "port": 5858
        }
    ]
  1. 包含两个类,一个是 Node 类用来表示节点,另一个事 LinkedList 类提供插入节点、删除节点等一些操作。
    (1)Node类中包含数据域和指针域: element 用来存储节点的数据,next 是指向下一个节点的指针,代码如下:
function Node(element) 
{
    this.element = element;   //数据域
    this.next = null;         //指针域
}

(2)LinkedList类提供了对链表进行操作的方法,包括查询,插入,删除节点等。

function LList () {//链表类
    this.head = new Node( 'head' );     //头节点
    this.find = find;                   //查找节点
    this.insert = insert;               //插入节点
    this.remove = remove;               //删除节点
    this.findPrev = findPrev;           //查找前一个节点
    this.display = display;             //显示链表
}
  1. 查找 遍历链表,查找给定的数据。创建一个新节点,将链表的头节点赋给这个新创建的节点,然后在链表上循环,如果当前节点的 element 属性和我们要找的信息不符,就将当前节点移动到下一个节点,如果查找成功,该方法返回包含该数据的节点;否则,就会返回null。
function find ( item ) {//查找给定节点
    var currNode = this.head;
    while ( currNode.element != item ){
        currNode = currNode.next;
    }
    return currNode;
}

4.插入 将新节点的 next 属性设置为后面节点的 next 属性对应的值,然后设置后面节点的 next 属性指向新的节点。

function insert ( newElement , item ) {//插入节点
    var newNode = new Node( newElement );
    var currNode = this.find( item );
    newNode.next = currNode.next;
    currNode.next = newNode;
}
  1. 删除 从链表中删除节点时,先要找待删除节点的前一个节点,修改它的 next 属性,使其指向待删除节点的下一个节点。先定义一个 findPrevious 方法遍历链表,检查每一个节点的下一个节点是否存储待删除的数据。
function findPrev( item ) {//查找要删除节点的前一个节点
    var currNode = this.head;
    while ( !( currNode.next == null) && ( currNode.next.element != item )){
        currNode = currNode.next;
    }
    return currNode;
}
function remove ( item ) {//删除节点
    var prevNode = this.findPrev( item );
    if( !( prevNode.next == null ) ){
        prevNode.next = prevNode.next.next;
    }
}
  1. 显示 为了能知道自己做的是否正确,添加显示
function display () {//显示链表元素
    var currNode = this.head;
    while ( !(currNode.next == null) ){
        console.log( currNode.next.element );
        currNode = currNode.next;
    }
}
  1. 这里是一个number链表,要insert “1”“2”“3”“4”“5”,remove “2”
var number = new LList();

number.insert('1', 'head');
number.insert('2' , '1');
number.insert('3' , '2');
number.insert('4' , '3');
number.insert('5' , '4');
number.remove('2')
number.display();
  1. 把该数据保存为json格式的文件,并能从文件读取到内存中
var fs = require('fs');//文件模块
var path = require('path');//系统路径
var content = JSON.stringify(number);//把数据对象转换为json格式字符串
var file = path.join(__dirname, 'test.json');//指定创建目录及文件名称
//写入文件
fs.writeFile(file,content,
function(err)
{
if(err)
{
return console.log(err);
}
console.log('创建成功,地址为 '+file);
}
);

console.log('start sync read'); //同步读取开始
var date = fs.readFileSync('test.json','utf-8');
console.log('end sync read');    //同步读取结束

9.调试 运行成功,截图如下:

调试

四、总结

  • 多实践,多动手

你可能感兴趣的:(JavaScript编程训练)