队列和栈的深度教学

队列和栈(自己动手写API系列一)

前言: 我的建议就是学完什么真正可以让你有收获的东西 写下来

记录下

------------------------------------------------------------------------------------

首先是队列和栈 我这里用的是JAVA语言 因为马上大二了

也不能只用C写一些东西了 摘自<<"Thinking in java">>一书 一

个API 应该首先放的是成员变量 然后是public 的 方法 使用者读

完public就不用在往下读了

------------------------------------------------------------------------------------

 

一.队列(Queue)

 

队列是什么? 是一种数据结构 对,但是这种数据结构在日常生活中经常用到

比如你排队的时候 你总要有一个先来后到.

就是你先来了 你买完东西 你就先 离开了

对应到数据 你先进来 你就要 先出去.

 

接下来让我们看一下队列的方法摘要

public class Queue<Item>//类的声明 Item的泛型

 

public int size() //返回队列个数大小

 

public boolean isEmpty() //判断当前是不是空队列 是的话返回true

 

public void enqueue(Item Date)//向队列添加一个数据

 

public Item dequeue()//向队列删除一个数据 并返回

 

public QueueLinkIterator Iterator() //返回自己手写的一个迭代器

 

private class QueueLinkIterator implements Iterator<Item>

//内部类实现了迭代器

 

private class Node //内部类 链表的结点

 

好了 方法基本上看完了这里我们选择链表实现. 在JAVA中写链表要比C语言简单的多

 

想一想你生活中的排队.

如果又有新人来排队是不是排到了队尾??

队首的人处理完了 队首的人先走?

所以我们必须得要有一个队首 和 队尾对吗?

队首负责出人 队尾负责进人 你发现这样就很简单.

先来看一下我们链表结点的定义

private class Node {
        Item Date;
        Node next;
        Node() {}
        Node(Item Date, Node next) {
            this.Date = Date;
            this.next = next;
        }
    }

因为这是一个内部类 我们并不想让外界知道所以用private 修饰

那两个构造方法其实也可以不写 我们一会说.

然后就是让我们看一下成员变量

    private Node first; //队首的结点

    private Node last; //队尾的结点

    private int N = 0; // 个数

    private int number = 0;//这个是操作数 我们最后讲

先来看 size() 和 isEmpty() 两个超简单的方法

size 代表的是什么? 就是你的个数嘛 不久是你成员的N?

 public int size() { return N; }

那isEmpty()判断的是你是不是空队列 是返回true 想想这个条件 也很简单

就是判断队首的位置有没有人就行了

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

这两个简单的操作基本上搞定了.

然后就是进队和出队了.

我们先来讲进队吧.

public void enqueue(Item Date) //Item 是你要传入的数据类型

让我们看一场图

我们第一个结点是这个样子的

因为只有一个结点 所以 他既是头结点又是尾结点

然后又来了一个结点

因为第一个结点 我们现在first 和last 都是他 但是因为我们进队都是队尾进队

所以让last的下一个等于这个进队的人 然后让last变成新进的人

之后的first都不动了

 

 

好了 让我们看看怎么实现

首先让一个临时结点保存last结点

然后让last变成新的结点

让临时结点的下一个指向了last 完成

        Node temp = last;
        last = new Node(Date, null);
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值