数据结构与算法学习第一天-JAVA篇

数据结构与算法学习第一天

队列:是一种常用的线性数据结构,是一种特殊的线性表,对它的插入和删除操作限定在表的两端进行,只能从队尾插入,从队头删除,遵循先进先出原则。

队列的基本操作
1、initialize:队列的初始化操作。
2、Count:返回队列的长度。
3、isEmpty:判断队列是否为空。
4、isFull:判断队列的状态是否已满,即初始化时预分配的空间是否已经占满。
5、addQueue:入队。将新的数据元素加入到队尾,成为新的队尾元素。入队前需要判断队列是否已满。如果队列未满,则接收新元素插入到队尾,如果队列已满,则产生上溢错误,或者未队列分配更大的空间,然后接收新元素入队。
6、DeQueue:出队。该操作从队头处取出数据元素,下一个元素成为新的队头。进行出队操作之前,必须判断队列是否为空,为空则产生下溢错误。
7、Peek:获取队头元素,但不移除该元素。

下面是代码部分:通过Java使用数组实现。

import java.util.Scanner;

public class arrayQueueDemo {
	public static void main(String[] args) {
		//测试
		//创建一个队列
		arrayQueue arrayQueue1 = new arrayQueue(3);
		char key = ' ';
		Scanner scanner = new Scanner(System.in);
		boolean loop = true;
		
		while(loop) {
			System.out.println("s:显示队列数据");
			System.out.println("e:退出程序");
			System.out.println("a:添加数据到队列");
			System.out.println("g:从队列取出数据");
			System.out.println("h:查看队列头的数据");
			key = scanner.next().charAt(0);
			
			switch(key) {
			case 's':
				arrayQueue1.showQueue();
				break;
			case 'e':
				return;
			case 'a':
				System.out.println("请输入一个值:");
				int value = scanner.nextInt();
				arrayQueue1.addQueue(value);
				break;
			case 'g':
				try {
					System.out.printf("队头的值为:%d\n",arrayQueue1.getQueue());
					
				}catch(Exception e){
					System.out.println(e.getMessage());
				}
				break;
			case 'h':
				System.out.println("队头如下:");
				arrayQueue1.headQueue();
				break;
			default:
				break;
				
			}
			
			
		}
		scanner.close();

		
	}

}

class arrayQueue{
	private int rear;  //指向队列尾
	private int front; //指向队列头
	private int maxSize;
	private int[] data;
	
	//创建队列的构造方法
	public arrayQueue(int arrMaxSize) {
		maxSize = arrMaxSize;
		data = new int[maxSize];
		rear = -1;
		front = -1;
	}
	
	//判断队列是否已满
	public boolean isFull() {
		return rear == maxSize - 1;
	}
	
	//判断队列是否为空
	public boolean isEmpty(){
		return rear == front;
	}
	
	//入队列
	public void addQueue(int intData) {
		if(this.isFull()) {
			System.out.println("The queue is full!!");
			return;
		}
		rear++;
		data[rear] = intData;
	}
	
	//出队列
	public int getQueue() {
		if(this.isEmpty()) {
			throw new RuntimeException("队列空,不能取数据");
		}
		front++;
		return data[front];
	}
	
	//显示队列的数据
	public void showQueue() {
		if(this.isEmpty()) {
			System.out.println("这是个空队列!");
			return;
		}
		System.out.println("队列如下:");
		for(int i=front+1;i<rear+1;i++) {
			System.out.printf("%d\t",data[i]);
		}
		System.out.println();
	}
	
	//显示队头
	public int headQueue() {
		if(this.isEmpty()) {
			throw new RuntimeException("队列为空,没有数据!");
		}
		return data[front+1];
	}
}

你可能感兴趣的:(数据结构与算法)