使用链接列表实现队列

时间:2015-05-11 23:36:51

标签: java

我正在尝试了解add方法如何运行ListQueue进行修订。任何帮助都感激不尽。我无法在网上找到任何完整的解释,遗憾的是我无法理解它。

private Cell frontCell,backCell; 

  @Override
public void add(char x) {
   Cell newCell = new Cell(x);
    if(frontCell == null){
        frontCell = backCell = newCell;
    }else{
        backCell.next = newCell;
        backCell = newCell;
    }
}

还有一个内部类“Cell”

 public class Cell{

    char data;

    Cell next;

    public Cell(char data){
        this.data = data;
        next = null;
    }
}

“frontCell”将Cell存储在队列的开头,“backCell”将Cell存储在后面。

“frontCell”引用“backCell”,其中包含刚刚添加的数据。然后,如果添加了另一个字符“backCell.next = newCell”和“backCell = newCell”。

如何存储队列中前后单元格之间的单元格?

如何将“frontCell”的引用设置为“backCell”?

3 个答案:

答案 0 :(得分:1)

您的Cell类对于每个单元格都有data,而next则引用列表中的下一个单元格,这就是它们全部链接在一起的方式。

if(frontCell == null)询问列表是否为空,如果是,则为frontCell = backCell = newCell;,这意味着您要添加的新Cell是列表中唯一的单元格,因此它是{{1还有frontCell

backcell如果列表不为空,else您要添加的新单元格由backCell.next = newCell;链接,而您的newCell是新的backCell(backCell )。

尝试在纸上绘制类似这些数据结构可能更容易(如this excellent free Data Structures textbook节目),并尝试添加和删除一些单元格,遵循代码告诉您的情况。

答案 1 :(得分:0)

frontCell = backCell = newCell行仅在frontCell为空时触发,即当队列为空时触发。这是有道理的 - 当你向0元素队列添加一个元素时,它变成一个1元素的队列,所以前面和后面的单元格是相同的。

如果队列中已有单元格,则队列中的最后一个元素将其下一个指针指向最新添加,然后将新添加设置为后面。

空队列:

 []
 /\
f  b

添加一个元素

[E1]
 /\ //front and back are pointing
f  b

添加前的多元素队列:

[E1->E2->E3->(null)]
 /        \
f          b

添加后:

[E1->E2->E3->E4-null]
 /            \
f              b

答案 2 :(得分:0)

我不是专家,但我会尝试解释我理解它的方式。

创建队列时,它是空的,这意味着前单元格和后单元格都为空。

然后添加新单元格(单元格1)

Cell newCell = new Cell(x)

新单元格存储值x,其下一个单元格为空,因为您没有在正面和背面之间插入,然后输入if,因为我说你的前单元格为空

if(frontCell == null){
    frontCell = backCell = newCell;
}

这里新单元格是正面和背面,下一个单元格为空,因为没有其他项目。

这次添加另一个单元格(单元格2)时,不会触发if代码,因为front不再为null,因此执行的代码是

backCell.next = newCell;
    backCell = newCell;

这里最后一个单元格(你唯一拥有的单元格)改变了它的下一个单元格,它先前为null,指向第二个单元格,然后引用后面的单元格,从第一个单元格改为第二个单元格。如果此时调试代码,则会有类似

的内容
firstcell= Cell1
Cell1.next= Cell2
Cell2.next = null
back = Cell2

如果您添加另一个单元格,那么

firstcell= Cell1
Cell1.next= Cell2
Cell2.next = Cell3
Cell3.next=null
back = Cell3

我希望这可以帮助你做得更好