美文网首页
JavaScript编程训练

JavaScript编程训练

作者: 石石是石头的石 | 来源:发表于2019-04-08 18:00 被阅读0次

    一、前言

    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编程训练

          本文链接:https://www.haomeiwen.com/subject/zbfpiqtx.html