/**
* Queue.java
* 线性表之队列
* 队列有如下特点:
* 先进先出
* 即,从尾部添加(push)新数据
* 从头部取出(pop)数据
*/
/**
* 队列(Queue)也是一种运算受限的线性表。
* 它只允许在表的一端进行插入,而在另一端进行删除。
* 允许删除的一端称为队头(front),允许插入的一端称为队尾(rear)。
*/
package line;
/**
* @author sunxboy
* 9:59:59 AM May 22, 2007
*/
public class Queue {
int data[];
int maxSize;
int size;
int front; //允许删除的一端
int rear; //允许插入的一端
public Queue(int maxSize) {
this.maxSize = maxSize;
this.data = new int[maxSize];
size= 0;
rear = 0;
front =0;
}
public boolean isEmpty() {
return size==0;
}
public boolean isFull() {
return size==maxSize;
}
/**
* 循环队列
* @param data
* @return
*/
public boolean push(int data)throws Exception {
if(isFull())
throw new Exception("队列已满!");
size++;
this.data[rear]= data;
// if(rear+1==maxSize)
// rear=0;
// else
// rear++;
rear=(rear+1)%maxSize;
return true;
}
public int pop() throws Exception{
int temp;
if(isEmpty())
throw new Exception("队列是空的.");
temp = this.data[this.front];
this.size--;
// if(front+1==maxSize)
// front=0;
// else
// front++;
front=(front+1)%maxSize;
return temp;
}
public static void main(String[] args) throws Exception{
Queue queue=new Queue(10);
queue.push(1);
queue.pop();
// queue.pop();
queue.push(2);
queue.push(3);
queue.push(4);
queue.push(5);
queue.push(6);
queue.push(7);
queue.push(8);
queue.push(9);
queue.push(10);
// queue.push(11);
while(!queue.isEmpty())
{
System.out.println(queue.pop());
}
}
}
分享到:
相关推荐
本实验报告的主题围绕线性表、串、队列和栈这四种基本的数据结构展开,旨在通过实践加深对这些概念的理解。线性表是一种线性的数据结构,其中元素按特定顺序排列,每个元素只有一个前驱和一个后继,除了第一个和最后...
线性表、栈和队列是计算机科学中最基础的数据结构,它们在编程中扮演着重要角色,尤其是在处理数据和算法设计时。以下是对这些概念的详细说明: **线性表**: 线性表是一种基本的一维数据结构,由有限个相同类型...
`QueueLinkListWithHead.cpp`和`QueueLinkListWithoutHead.cpp`两个文件分别表示带头结点和不带头结点的链式队列实现。头结点的作用是在链表头部提供一个额外的节点,方便插入和删除操作,而不需要特别考虑是否为空...
常见的队列实现方式有循环数组和链表。 4. **线性存储与链式存储**:线性存储通常指数组,它占用连续的内存空间,通过下标访问元素,适合随机访问,但插入和删除操作可能涉及大量元素的移动。链式存储则是通过链表...
例如,操作系统中的进程调度就是基于优先级队列实现的。 在实际编程中,线性表、栈和队列通常用数组或链表来实现。数组实现简单但可能造成空间浪费,链表实现则更灵活但需要额外的指针存储。在给定的文件"数据结构...
这里我们将讨论基于数组的静态队列实现。 首先,我们需要定义一个队列结构,包括存储元素的数组、数组大小、当前队头和队尾位置: ```c typedef struct { int data[MAX_QUEUE_SIZE]; // 假设最大队列大小为MAX_...
常见的队列实现有循环队列和链式队列。 外部排序是指处理大数据量时,由于内存限制,数据不能全部装入内存,需要借助外部存储进行的排序过程。磁带和磁盘是常见的外部存储设备。 磁带存储器是一种顺序存取设备,...
7. **课程内容**:"数据结构第三章课件,特殊线性表--栈、队列和串"可能会涵盖这些概念的定义、操作、特性、实现方式、以及相关的算法和应用。电子教案可能包括PPT演示文稿、讲解笔记、习题解答等内容,帮助学生深入...
本主题将深入探讨线性表、链表、队列、栈这四种基本的数据结构,并以C++语言为例,通过相关源代码(stringData.cpp、seqList.cpp、node.cpp、seqQueue.cpp、linkQueue.cpp、linkStack.cpp、seqStack.cpp)来解析其...
本教程将深入探讨C++中线性表、栈、队列和串的数据结构及其实现。 线性表是最基础的数据结构,它是一组相同类型元素的有序集合。在C++中,线性表可以使用数组或链表来实现。数组实现简单,访问速度快,但大小固定;...
线性表广泛应用于各种数据处理场景,例如数据库中的记录管理、队列、栈、哈希表的基础等。在C语言的编程实践中,理解并熟练掌握线性表的实现和操作,对于提升编程能力至关重要。 8. **代码实现** 文件"sqlist...
虽然实验报告中未给出具体的队列实验实例,但可以通过类似的编程方式实现队列的基本操作。 #### 四、串 **定义与概念:** - **串**是由零个或多个字符组成的有限序列。 - 在计算机科学中,通常使用字符串(string...
本项目以Java语言实现了多种线性表,包括表、队列和栈,下面我们将详细探讨这些概念及其实现方式。 1. **线性表**:线性表是最基本的数据结构之一,包含n(n>=0)个相同类型的元素,按特定顺序排列。它可以被抽象为...
C++实现线性表、堆栈和队列时,可以自定义结构体或类来表示数据节点,并提供相应的成员函数完成操作。例如,对于线性表,可以创建一个包含数据和指向下一个元素的指针的结构体;对于堆栈,可以包含一个大小固定的...
虽然代码中没有直接实现队列,但队列的基本操作(如入队、出队)可以通过数组或链表实现,与线性表的插入和删除操作类似。 二叉树是一种非线性的数据结构,每个节点最多有两个子节点。二叉树可以用来实现多种算法,...
线性表、栈和队列是计算机科学中最基础的数据结构,它们在编程中扮演着重要角色,尤其是在数据处理和算法实现方面。以下是对这些概念的详细说明: **线性表** 是一个序列,其中的元素按照特定顺序排列,每个元素都...
顺序存储的线性表是最简单的数据结构之一,它将元素存储在一个连续的内存空间中。例如,给定的代码段展示了如何在顺序存储的线性表中进行插入和删除操作。`sq_insert`函数用于在线性表中插入一个元素,它首先检查...
本套课件资源全面涵盖了数据结构的基本元素,包括串、数组、广义表、概论、线性表、栈和队列,这些都是构建复杂算法和程序的基础。 1. **串**:串是数据结构中的一种基本类型,它是由一个或多个字符组成的序列。串...
在这个实现中,我们关注的是链表、栈和队列这三种线性表的变体,它们都是用C++语言编写的。下面将详细介绍这三种数据结构及其在C++中的实现。 1. **链表**: 链表是一种非连续存储的数据结构,每个节点包含数据和...