黑马程序员技术交流社区

标题: LinkedList来模拟一个队列数据结构——为会死循环 [打印本页]

作者: 王延龙    时间: 2013-7-23 10:54
标题: LinkedList来模拟一个队列数据结构——为会死循环
本帖最后由 杨兴庭 于 2013-7-24 21:06 编辑

package practicetest;

import java.util.LinkedList;


public class LinkedTest {

        /**
         * 请用LinkedList来模拟一个队列或者堆栈数据结构。
         *
         * 堆栈:先进后出 First In Last Out ———— FILO
         *
         * 队列:先进先出First In First Out ———— FIFO
         *
         *
         * 实现思路:
         *                 我们应该描述一个这样的容器,给使用者提供一个容器对象完成这两种结构中的一种
         *                 存取分别封装link方法
         */
        
        public static void main(String[] args) {
               
                MyQueue myQueue = new MyQueue();
               
                myQueue.myAdd("object1");
                myQueue.myAdd("object2");
                myQueue.myAdd("object3");
                myQueue.myAdd("object4");
               
               
                while(!myQueue.isNull()){
                        
                        System.out.println(myQueue.myGet());
                        
                }

        }

}


//定义类

class MyQueue{
        
        private LinkedList link;
        
        public MyQueue(){
               
                link = new LinkedList();
        }
        
        /*
         * 队列添加元素的功能封装
         */
        public void myAdd(Object obj){
               
                link.addLast(obj);
        }
        
        /*
         * 队列取出元素的功能,
         */
        public Object myGet(){
               
                return link.getLast();
        }
        
        /*
         * 判断是否为空
         */
        public boolean isNull(){
               
                return link.isEmpty();
        }
}



作者: liuzhming    时间: 2013-7-23 11:57
队列的特点是数据从队列的末尾添加进去,从队列的头部取出,并移除。在你写队列取出元素的功能myGet()时,却返回的是队列的末尾元素。这有点像是实现一个栈,但又不完全是,因为栈会在取出元素后,把这个元素从栈中删除。myGet()方法应该通过从队列头部取出元素并删除元素,即使用LinkedList的pollFirst()方法。实现代码如下:
import java.util.LinkedList;
public class Test2 {
public static void main(String[] args)
{
        MyQueue my = new MyQueue();
        my.myAdd("aa");
        my.myAdd("bb");
        my.myAdd("cc");
        my.myAdd("dd");
        my.myAdd("ee");
        my.myAdd("ff");
        while(!my.isNull())
        {
                System.out.println(my.myGet());
        }
}
}
class MyQueue
{
        private LinkedList link;
        public MyQueue()
        {
                link = new LinkedList();
        }
        public void myAdd(Object obj)
        {
                link.addLast(obj);
        }
        public Object myGet()
        {
                return link.pollFirst();
        }
        public boolean isNull()
        {
                return link.isEmpty();
        }
}
作者: toShareBeauty    时间: 2013-7-23 12:02
楼上对的
作者: 冒烟的芒果    时间: 2013-7-24 11:42
MyQueue类中的myGet()函数有点问题
link.getLast() 是返回队列的最后一个元素 ,但是并不删除,所以这个队列会一直为 不空 状态,就导致了死循环
如果要返回并移除最后的元素 应该用 removeLast() ;移除并返回最前面的元素 用removeFirst()





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2