繁体   English   中英

将令牌插入双链表

[英]Inserting tokens into Double Linked List

我正在尝试通过标记数学表达式并将其放入我在实验室作业中创建的双向链表中来存储它。 在上交实验室之前进行测试时,我在列表中实现的insert方法完全可以正常工作,但是当我在插入表达式的标记后打印列表的内容时,会丢失一些标记。 我知道String Tokenizer正在工作,因为我可以打印所有令牌,而且它们都显示良好。

关于字符串令牌生成器如何对字符串进行令牌化,从而阻止我将它们作为通用对象插入到我的链接列表中,这有什么用吗? 我觉得这里有些行为我不知道。

作为参考,该类包含标记字符串并将其插入列表的方法:

import java.io.File;
import java.io.FileNotFoundException;
import java.lang.*;
import java.util.*;

public class Calculator {
DoubleLinkedListTest infixstorage;

public Calculator(){
    infixstorage = new DoubleLinkedListTest();
}

public static DoubleLinkedListTest ReadInFile(String path){
    File file = new File(path);
    DoubleLinkedListTest list = new DoubleLinkedListTest();

    try {
        Scanner scanner = new Scanner(file);

        while (scanner.hasNextLine()) {
            String line = scanner.nextLine();
            StringTokenizer st = new StringTokenizer(line);
            while (st.hasMoreTokens()){
                list.insert(st.nextToken());
            }
        }
        scanner.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    return list;
}

}

这是我的DoubleLinkedList的代码:

public class DoubleLinkedListTest implements DoubleLinkedList {
private DoubleNode head;
private DoubleNode tail;

public DoubleLinkedListTest(){
    head = new DoubleNode();
    tail = new DoubleNode();
    head.next = tail;
    tail.prev = head;
}

public void insert(Object x){
    if (lookup(x) == false){
        if (head.data == null){
            head.data = x;
        }
        else if (head.data != null && tail.data == null){
            tail.data = x;
        }
        else{
            DoubleNode NewNode = new DoubleNode();
            NewNode.data = x;
            NewNode.next = null;
            NewNode.prev = tail;
            tail.next = NewNode;
            tail = NewNode;
        }
    }
}
    //Runtime of insert method will be n, where n is the number of nodes

public void delete(Object x){
    if (this.lookup(x).equals(true)){
        if(x.equals(head.data)){
            head.next.prev = null;
            head = head.next;
        }

        else{
            DoubleNode temp = head;
            while(temp.next != null){
                if (temp.next.next == null && (temp.next).data.equals(x)){
                    temp.next.prev = null;
                    temp.next = null;
                    break;
                }
                if ((temp.next).data.equals(x)){
                    temp.next.next.prev = temp;
                    temp.next = (temp.next).next;
                    break;
                }
                else{
                    temp = temp.next;
                }
            }
        }
    }


}

public Object lookup(Object x){
    Boolean search = false;

    if (x.equals(head.data)){
        search = true;
    }

    else{
        DoubleNode temp = head;
        while (temp.next != null){
            if (x.equals(temp.data)){
                search = true;
                break;
            }
            if (temp.next.next == null && x.equals(temp.next.data)){
                search = true;
                break;
            }

            else{
                temp = temp.next;
            }
        }
    }
    return search;  
}

public boolean isEmpty(){
    if(head.next == tail && tail.prev == head)
        return true;
    else
        return false;

}

public void printList(){
    DoubleNode temp = head;
    System.out.println(temp.data + " ");

    while (temp.next != null){
        temp = temp.next;
        System.out.println(temp.data + " ");
    }

}

public void printListRev(){
    System.out.print(tail.data + " ");

    while (tail.prev != head){
        tail = tail.prev;
        printList();
    }


}
}

我想到了。 扫描程序一次读取文件的多行。 我以为只有一行,但在txt文件中只是这样显示。 实际上是三行并排放置。

编辑:错误警报,删除其他行后,它仍然错误地读取剩余的行

编辑2:或至少列表的打印不正确

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM