簡體   English   中英

鏈表堆棧實現-Java

[英]Linked List Stack Implementation - Java

我必須為我的一項任務以鏈接列表的形式實現堆棧。 我們必須實現接口DStack ,該接口在LinkedList.java文件中具有push()pop()peek()isEmpty() 該列表將包含一系列的雙打內容。

我仍然在掙扎的基本上是鏈表的push()pop()方法。 我不確定我已經建立了節點,但是這里是到目前為止的代碼:

public class ListStack implements DStack{

private Node head;
private int size;


private class Node{
    double d;
    Node next;

    public Node(){
        head = null;
        next = null;
    }

    public Node(double data){
        d = data;
    }
}

public boolean isEmpty() {
    return (head == null);
}

@Override
public void push(double d) {
    if(!isEmpty()){
        Node newHead = new Node(d);
        newHead.next = head;
        head = newHead;
        size++;
    }
    else
        throw new EmptyStackException(); //To change body of generated methods, choose Tools | Templates.
}

@Override
public double pop() {
    if(!isEmpty()){
        double d = head.d;
        head = head.next;
        size--;
        return d;
    }
    else
        throw new EmptyStackException(); //To change body of generated methods, choose Tools | Templates.
}

@Override
public double peek() {
    if(!isEmpty()){
        return head.d;
    }
    else
        throw new EmptyStackException(); //To change body of generated methods, choose Tools | Templates.
}

有人可以建議我是否正確地執行push()pop()方法嗎? 如果沒有,我到底需要在哪里修改它? 我正在網上尋找解釋,但是大多數材料對我來說真的沒有意義。

另外,我的老師禁止我們使用Java框架或其他類庫中的任何其他類。 這是否意味着我無法在代碼中使用Iterable 如果是這樣,那么就不需要為鏈接列表創建其他方法,例如remove()next()等,對嗎?

我仍在探討這些鏈表概念,因此,如果有人可以解決此問題,我將非常感激。 謝謝!

pop()peek()看起來不錯,但是當嘗試將push()放在空堆棧上時,您不應拋出異常。 如果是這樣,您將永遠無法使用這種愚蠢的東西。 相反,如果它為空,則可能要執行其他操作,但在任何情況下都不應push()拋出EmptyStackException

看起來還不錯,需要初始化頭,否則push / pop總是會拋出異常。 考慮在不可能的情況下引發堆棧滿異常,而不是空堆棧異常。 這將是無限的列表容量,可能是您可以考慮使用固定容量,然后在推送上會有限制。

除了已經提供的建議外,它還為我在一些基本情況下繪制堆棧/列表的狀態提供了很多幫助:開始時,介於其中的一些元素之間,以及結束時刪除最后一個元素。 然后逐步檢查代碼,檢查push()和pop()的變量和指針發生了什么。

當然,也可以使用調試器來完成,但是Pen&Paper有時可以解決問題;)祝您工作順利!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM