队列是一种特殊的线性表,只允许在表的前端进行删除操作,而在表的后端进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。当队列中没有元素时,称为空队列。
对于队列这种结构,其操作很简单,主要有以下几种:
初始化队列:创建一个队列。
进队列:将一个元素添加到队尾(相当于到队列最后排队等候)。
出队列:将队头的元素取出,同时删除该元素,使后一个元素成为队头。
获取队列第1个元素:将队头的元素取出,不删除该元素(队头仍然是该元素)。
获取队列长度:根据队头、队尾计算出队列中元素的数量。
数据结构_队列java源代码
package com.struct.www;
/**
* @author 丹青
*
*/
public class Queue {
//队列容量
private int maxSize;
//队列存储数组
private long[]array;
//队头"指针"
private int front;
//队尾"指针"
private int rear;
//队列元素个数
private int numItem;
/**
* @param args
*/
//构造函数
Queue(int max){
maxSize = max;
array = new long[max];
front = 0;
rear = -1;
numItem = 0;
}
//入队,插入元素
public boolean insert(long value){
//处理方式,如果队列未满,则可以顺利插入元素,返回true,否则插入队列不成功,返回false
//个人认为这种处理方式是合适的,好比你去火车站排队,发现前面的人太多,你肯定会走掉的
if(numItem<maxSize){
if(maxSize-1==rear){
rear=-1;
}
array[++rear]=value;
numItem++;
return true;
}
return false;
}
//出队,返回队头元素
public long remove(){
long result = array[front++];
if(maxSize==front){
front=0;
}
numItem--;
return result;
}
//不出队,返回队头元素
public long peekFront(){
return array[front];
}
//判断队列是否为空
public boolean isEmpty(){
return (0==numItem);
}
//判断队列是否充满
public boolean isFull(){
return (maxSize==numItem);
}
//返回队列实际长度
public int size(){
return numItem;
}
//显示队列,从队列头到队列尾
public void display(){
//队列不会循环到数组头
if(numItem<=maxSize-front){
for(int i=0;i<numItem;i++){
System.out.print(array[front+i]+" ");
}
System.out.println("");
return;
}else{
//队列会循环到数组头
for(int j=front;j<maxSize;j++){
System.out.print(array[j]+" ");
}
for(int k=0;k<=rear;k++){
System.out.print(array[k]+" ");
}
System.out.println("");}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//测试队列数据结构
Queue queue = new Queue(6);
queue.insert(1);
queue.insert(2);
queue.insert(3);
queue.insert(4);
queue.insert(5);
queue.insert(6);
//下面的插入不成功
queue.insert(7);
queue.display();
//移出两个元素再显示
queue.remove();
queue.remove();
queue.display();
//再插入三个元素然后显示,队列只能再插入两个元素
queue.insert(1);
queue.insert(2);
queue.insert(3);
queue.display();
}
}
队列测试结果
1 2 3 4 5 6
3 4 5 6
3 4 5 6 1 2
栈是一种线性表的特殊表现形式,与队列的“先进先出”不同,栈是按照“后进先出”(Last In Firt Out,LIFO)的原则处理数据。
栈的基本操作只有两个:
1、入栈(Push):即将数据保存到栈顶。进行该操作前,先修改栈顶指针,使其向上移一个元素位置,然后将数据保存到栈顶指针所指的位置。
2、 出栈(Pop):即将栈顶的数据弹出,然后修改栈顶指针,使其指向栈中的下一个元素。