[英]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.