A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨兴庭 于 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();
        }
}


评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

4 个回复

倒序浏览
队列的特点是数据从队列的末尾添加进去,从队列的头部取出,并移除。在你写队列取出元素的功能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();
        }
}

点评

LinkedList类里面好像并没有pollFirst()这个方法。  发表于 2013-7-24 11:44

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼上对的
回复 使用道具 举报
MyQueue类中的myGet()函数有点问题
link.getLast() 是返回队列的最后一个元素 ,但是并不删除,所以这个队列会一直为 不空 状态,就导致了死循环
如果要返回并移除最后的元素 应该用 removeLast() ;移除并返回最前面的元素 用removeFirst()

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马