队列(queue)同栈一样,也是表。是插入在一端(队尾)进行而删除在另一端(队头)进行的表。通过enqueue向队列中输入,通过dequeue从队列中输出。
顺序实现如下:
public class ArrayQueue<AnyType> {
private AnyType theArray[];
private int front,back; //定义队头队尾
private int currentSize; //队列中存放元素个数
private int maxSize=5; //队列中能存放元素的个数
public int size(){
return currentSize;
}
public ArrayQueue(){
theArray=(AnyType []) new Object[maxSize];
front=back=0;
currentSize=0;
}
public boolean isEmpty(){
return front==back&¤tSize==0;
}
public void enQueue(AnyType x){ //入队
if(currentSize==maxSize){ //溢出
System.out.println("队列已满");
}
theArray[back]=x;
back++;
if(back==maxSize) //构成循环队列
back=0;
currentSize++;
}
public AnyType deQueue(){ //出队
if(isEmpty())
return null;
AnyType a=theArray[front];
front++;
if(front==maxSize)
front=0;
currentSize--;
return a;
}
public AnyType getFront(){
if(isEmpty())
return null;
return theArray[front];
}
public static void main(String[] args) {
//验证部分
ArrayQueue<Integer> aq=new ArrayQueue<Integer>();
aq.enQueue(0);aq.enQueue(1);aq.enQueue(2);aq.enQueue(3);aq.enQueue(4);
aq.deQueue();aq.deQueue();
aq.enQueue(0);
int m=aq.size();
for(int i=0;i<m;i++){
System.out.println(aq.deQueue());
}
}
}
链式实现如下:
public class SingleLinkedQueue<AnyType> {
private Node<AnyType> front,back; //定义front,back结点
private int currenSize; //链表中数据个数
private static class Node<AnyType>{ //定义结点类
public AnyType data;
public Node<AnyType> next;
public Node(AnyType data,Node<AnyType> next){
this.data=data;
this.next=next;
}
public Node(AnyType data){
this.data=data;
this.next=null;
}
public Node(){
this.data=null;
this.next=null;
}
}
public SingleLinkedQueue(){
front=back=null;
currenSize=0;
}
public boolean isEmpty(){
return currenSize==0;
}
public int size(){
return currenSize;
}
public void enQueue(AnyType x){ //入队
Node<AnyType> p=new Node<AnyType>(x);
if(front==null){ //
front=back=p;
}
back.next=p;
back=p;
currenSize++;
}
public AnyType deQueue(){ //出队
if(front==null){
return null;
//若为void方法,System.out.println("此队列已无数据");
}
AnyType old=front.data;
front=front.next; //令front1后移
currenSize--;
return old;
}
public static void main(String[] args) {
//验证部分
SingleLinkedQueue<String> slq=new SingleLinkedQueue<String>();
slq.enQueue("aaa");slq.enQueue("bbb");slq.enQueue("ccc");slq.enQueue("ddd");slq.enQueue("eee");
int m=slq.size();
for(int i=0;i<m;i++){
System.out.println("第"+(i+1)+"次输出的数据"+slq.deQueue());
}
}
}
分享到:
相关推荐
顺序存储的线性表和运算 链式存储的线性表和运算 顺序栈的实现和运算 链栈的实现和运算 顺序队列的实现和运算 链式队列的实现和运算 循环队列的实现和运算
顺序存储(数组)和链式存储(链表),此博文描述的是数组的实现(后续更新链表实现) 代码实现 初始化队列:初始化一个size长度的队列,队列的值都为0 判断队列是否已满:队列满,不可插入队列 判断队列是否为空...
实现栈的时候有两种思维 1 顺序栈:由数组去实现 存在假溢出问题:里面的元素个没有超过它的最大值,但是看... 因此我们设计顺序队列的时候要设计循环队列:文章说明了循环队列的解决方法 2 链式栈:由链表去实现
问题:用数组实现一个顺序队列 问题:用链表实现一个链式队列 问题:实现一个循环队列 递归 问题:编程实现斐波那契数列求值f(n)=f(n-1)+f(n-2) 问题:编程实现求阶乘n! 排序 问题:实现归并排序、快速排序、...
## 队列* 用数组实现一个顺序队列* 用链表实现一个链式队列* 实现一个循环队列 ## 递归* 编程实现斐波那契数列求值f(n)=f(n-1)+f(n-2)* 编程实现求阶乘n!* 编程实现一组数据集合的全排列 ## 排序 * 实现归并排序、...
队列存储方式:顺序存储(数组)和链式存储(链表); 队列作用:维持顺序——广度优先搜索 (转载自铜梁熊文) 采用循环队列可以减少空间浪费。首先规定一个队列长度maxn,这样两个基本操作变为: 入队:rear=(rear...
用数组实现一个顺序队列 用链表实现一个链式队列 实现一个循环队列 3、递归 编程实现斐波那契数列求值f(n)=f(n-1)+f(n-2) 编程实现求阶乘n! 编程实现一组数据集合的全排列 实现:assignment2 【任务3-排序与二分查找...
第六章 - 二叉树链式存储、二叉树顺序存储、哈夫曼树与哈夫曼编码、树孩子表示法、树孩子兄弟表示法、树双亲表示法 第七章 - 图数组表示法、图邻接表表示、图的应用 第九章 - 哈希表、折半查找、B-树、二叉平衡树 ...
顺序双端队列 链式双端队列 循环队列 击鼓传花游戏 回文检查器 递归 斐波那契数列 求 n 的阶乘 数据集合的全排列 排序 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 计数排序 基数排序 查找 有序数组的二...
Time 时间复杂度:算法最坏情况下执行的次数,与n(循环次数)相关 S(n) Space 空间复杂度:算法所需变量所占字节数 所有数据结构: *线性表(顺序,链式) *栈(顺序,链式) 队列(单向和环状的顺序) 串,数组,...
10.4.2 使用字符串指针变量与字符数组的区别 158 10.5 函数指针变量 159 10.6 指针型函数 160 10.7 指针数组和指向指针的指针 161 10.7.1 指针数组的概念 161 10.7.2 指向指针的指针 164 10.7.3 main 函数的参数 166...
10.4.2 使用字符串指针变量与字符数组的区别 158 10.5 函数指针变量 159 10.6 指针型函数 160 10.7 指针数组和指向指针的指针 161 10.7.1 指针数组的概念 161 10.7.2 指向指针的指针 164 10.7.3 main 函数的参数 166...
数组栈 数组实现队列 链表实现栈 链式存储队列 二分查找法 任意构造层次遍历输出 二叉排序树 先根建立二叉树及遍历 堆排 顺序栈两个迎面增长 树深度节点数 有序链表的合并 快速排序 ...循环链表实现队列
范例1-28 顺序队列操作 64 ∷相关函数:push函数 pop函数 1.2.6 循环队列 66 范例1-29 循环队列 66 ∷相关函数:EnQueue函数 DeQueue函数 1.2.7 链队列的入队、出队 69 范例1-30 链队列入队、出队 69 ∷相关函数:...
valid number leetcode 自动机 Noah学习之旅 编程基础 Task1(8.3-8.5) 1. 数组 实现一个支持动态扩容的数组,支持增删改操作 ...用数组实现一个顺序队列 用链表实现一个链式队列 实现一个循环队列 5.递
3) 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径);行列各为5(包括外墙),迷宫内墙单元数为2。 实验4:串 1) 模式匹配改进算法:KMP算法,实现书中4.6,4.7,4.8算法。 实验5: 数组和广义表 1) 求...
(2)栈和队列的顺序和链式存储; (3)栈和队列的应用; 4.字符串 (1)字符串的定义、存储和操作; (2)字符串的模式匹配; 5.数组和广义表 (1)数组的顺序存储表示; (2)矩阵的压缩存储;
第十八课:数组的顺序表示与实现 第十九课:实验四 串的实现实验 第二十课:广义表 第二十一课:树、二叉树定义及术语 第二十二课:实验五 数组实验 第二十三课:二叉树的存储结构 第二十四课:遍历二叉树 第二十五...
12_数组中括号与指针关系和数组名常量指针分析 13_字符串一级指针内存模型_传智扫地僧 14_字符串copy函数技术推演 15_字符串copy函数强化训练_判断null_引入辅助指针变量_传智扫地僧 16_项目开发模型强化_strstr_...