`
Cecily
  • 浏览: 58273 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论

队列的一个小练习

阅读更多

      今天随手写了一个关于队列的小练习,总觉得不是特别贴切,但一时还没有更好的想法,发出来请大家提意见吧。这是一个模仿队列数据存储方式的停车场小程序,车辆可以入站和出站,参考效果如附件图。

车辆进站时的效果:

     

 

车辆出站时的效果:



  

实现的java源码如下:

package ch3队列;

import java.awt.Color;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.*;

public class FinalCar extends JFrame {
	int x=10;		//图片的横坐标
	int y=10;	 	//图片的纵坐标
	int width=100;  //图片的宽度
	int height=120; //图片的高度
	Object queue[];
	int    size=5;
	int    front=0;	//头指针,牺牲一个节点,front及rear均指向此头节点,此节点不存放数据,只用于在代码第97行间接判断队列是否放满
	int    rear=0;  //尾指针
	
	JLabel lblPic=new JLabel(new ImageIcon("car.GIF"));		//定义标签数组,存储汽车图片
	public FinalCar() {
		
		super();
		queue=new Object[5];   //最多放4辆汽车
		this.setIconImage(new ImageIcon("/car_icon.GIF").getImage());
		setTitle("队列演示");
		getContentPane().setLayout(null);
		new FlowLayout();
		final JPanel panel = new JPanel();
		panel.setBackground(Color.WHITE);
		panel.setBounds(10, 10, 461, 143);
		panel.setLayout(null);//调整为通过坐标控制的布局形式
		final JButton btnIn = new JButton();
		
		//进站
		btnIn.addActionListener(new ActionListener() {
			public void actionPerformed(final ActionEvent e) {
				if(isFull())
				{
					JOptionPane.showMessageDialog(null, "停车场已满,请等待!");
				}
				else
				{
					rear=(rear+1)%size;
					x=460-rear*(width+5);
					queue[rear]=new JLabel(new ImageIcon("car.GIF"));
					((Component) queue[rear]).setBounds(x, y, width, height);
					panel.add((Component) queue[rear]);
					repaint();         //如果是null式布局,则需要repaint
					//setVisible(true);//如果是流式布局,setVisible即可显示图片更新
				}
			}
		});
		
		getContentPane().add(panel);
		btnIn.setText("进站");
		btnIn.setBounds(76, 170, 106, 28);
		getContentPane().add(btnIn);

		final JButton btnOut = new JButton();
		//出站
		btnOut.addActionListener(new ActionListener() {
			public void actionPerformed(final ActionEvent e) {
				JLabel lblPic=null;
				if(isEmpty())
				{
					JOptionPane.showMessageDialog(null, "停车场已空,没有车辆!");
					rear=0;
				}
				else
				{
					front=(front+1)%size;
					lblPic=(JLabel) queue[front];
					panel.remove(lblPic);		//移除汽车
					repaint();
				}
				
			}
		});
		btnOut.setText("出站");
		btnOut.setBounds(208, 170, 106, 28);
		getContentPane().add(btnOut);
		this.setSize(500, 250);
		this.setVisible(true);
	}
	//判断停车场是否已经满了
	public boolean isFull()
	{
		boolean full=true;
		if((this.rear+1)%size==front)	//停车场满了
		{
			full=true;
		}
		else
		{
			full=false;
		}
		return full;
	} 
	//判断停车场是否是空的
	public boolean isEmpty()
	{
		boolean empty=true;
		if(this.rear==this.front)		//停车场已经空了
		{
			empty=true;
			rear=0;
			front=0;
		}
		else
		{
			empty=false;
		}
		return empty;
	} 

	public static void main(String[] args) {
		FinalCar frame=new FinalCar();
		
	}
}

 

其实对最终的演示效果不太满意,但在界面的表现上来说实在不想花更多的时间,只希望能基本表现出队列的一些使用方法,请大家多提意见。

 

  • 大小: 20.7 KB
  • 大小: 17.7 KB
1
0
分享到:
评论

相关推荐

    栈和队列基本操作及练习

    例如,操作系统中的进程调度就是基于优先级队列实现的,新进程被添加到队尾,而运行的进程完成后,下一个进程从队头开始执行。 栈和队列的操作可以使用数组或链表来实现。数组实现简单但有容量限制,当元素数量超过...

    入队列出队列练习_Labview队列的使用_labview队列_

    这个例子中的“入队列出队列练习.vi”就是一个交互式的实例,通过可视化的方式演示了如何添加元素到队列(入队)以及如何取出元素(出队)。 首先,我们需要创建一个队列。在LabVIEW中,可以使用“创建队列”函数来...

    两个栈实现一个队列

    本篇我们将探讨如何利用两个栈来模拟一个队列,这是数据结构与算法中的一个经典问题。 标题“两个栈实现一个队列”暗示了我们要用到栈的特性来构建一个具有队列行为的数据结构。通常,栈支持两种基本操作:push...

    栈和队列练习

    - **入队(EnQueue)**: 在队列尾部添加一个数据元素。 - **出队(DeQueue)**: 移除并返回队列头部的数据元素。 - **判断队列是否为空**: 检查队列中是否有数据元素。 #### 3. 队列的应用示例 在这段代码中,队列被...

    C语言 数据结构 队列的练习

    利用队列的性质完成括号匹配的功能。假设表达式中允许有两种括号:圆括号和方括号,其嵌套的顺序随意,即(()[ ])或 [([ ] [ ])]等为正确格式,[( ])或(((]均为不正确的格式。检验括号是否匹配的方法可用...

    C中数据结构(链表,队列,栈的练习)

    2. 删除:找到要删除的节点,更新其前一个节点的指针以指向后一个节点。 3. 查找:遍历链表直到找到目标节点或到达链表末尾。 4. 修改:定位到目标节点并更新其数据域。 接下来,我们讨论队列。队列是一种先进先出...

    练习:c++版本FIFO队列

    本练习是关于实现一个基于C++的FIFO队列模板类,利用模板类可以使得该队列适用于任何数据类型。下面我们将详细讨论这个主题。 **FIFO队列的概念** FIFO队列是一种线性数据结构,其操作特性类似于现实生活中的排队。...

    cy-优先队列的练习(队列四--林大版).pdf

    2. 大根堆:使用`priority_queue,vector,less<int>>`来声明,其中`less<int>`是另一个函数对象,它让优先队列按照从大到小的顺序排列元素。与小根堆类似,插入、访问和移除元素的方法与小根堆相同。 在文件中还提到...

    队列练习.doc

    队列练习.doc

    栈和队列+串+数组和广义表+树和二叉树练习题.docx

    13. 数组 Q[n]用来表示一个循环队列,f 为当前队列头元素的前一位置,r 为队尾元素的位置,假定队列中元素的个数小于 n,计算队列中元素的公式为 (n+f-r)% n。 14. 设有 4 个数据元素 a1,a2,a3 和 a4,对他们分别...

    Java算法练习-双栈队列练习题

    [Java]算法练习-双栈队列练习题

    一年级下册体育 《队列队形练习》教学设计.pdf

    在此过程中,教师可以通过穿插小游戏来吸引学生的注意力,使得队列练习更加生动有趣。例如,可以组织“集中注”游戏,让学生在游戏中练习集中注意力,反应要快。同时,教师要注意及时纠正学生在练习中出现的错误,...

    数据结构 栈和队列PPT

    在实际生活中,银行排队系统就是一个典型的队列应用实例。 PPT中可能会详细讲解以下内容: 1. 栈的基本操作:Push(入栈),Pop(出栈),Peek(查看栈顶元素但不移除),以及Stack的初始化和判断空栈的方法。 2. ...

    C++数据结构,以顺序表作为队列成员变量实现队列

    在本题中,我们关注的是如何使用C++来实现一个队列,其中队列的成员变量是一个顺序表。顺序表是数据结构中的基本形式,它将元素存储在一块连续的内存区域中,通过数组实现。下面我们将详细讨论C++中顺序表作为队列...

    回文判断程序栈和队列基本操作

    在判断一个字符串是否为回文时,栈和队列可以发挥重要作用。 首先,我们来了解一下栈(Stack)和队列(Queue)。栈是一种后进先出(Last In, First Out, LIFO)的数据结构,就像一个堆叠的盘子,新添加的盘子总是在...

    数据结构 队列算法

    1. 初始化:创建一个空队列,通常包括分配内存空间以存储队列元素。 2. 入队:在队尾添加元素,通常会检查队列是否已满,以防止溢出。 3. 出队:从队头移除并返回元素,确保队列的FIFO特性。 4. 查看队头元素:不...

    行进间队列队形练习教学.doc

    1. 分解练习:以口令“向左(右)转——走,一、二、三”或“向后转——走,一、二、三”进行,分别在每个步骤中完成特定动作,如“一”时只移动脚步,“二”时转体,“三”时迈步。 2. 原地踏步练习:在原地踏步...

    优先队列、图等总结及习题.docx

    优先队列、图等总结及习题 优先队列是一种特殊的队列结构,它的出队顺序是根据元素的优先权...1. 归并排序-优先队列练习 2. 由邻接矩阵画出相应的图 G 3. 使用深度优先搜索和宽度优先搜索遍历无向图 4. 求最小生成树

    C#编写一个类实现队列的功能,

    下面我们将详细讨论如何在C#中实现一个简单的队列类,并创建一个测试类来验证其功能。 首先,我们定义了一个名为`Node`的内部类,用于表示队列中的每个元素。这个类包含三个成员: 1. `data`:存储节点的值,类型...

Global site tag (gtag.js) - Google Analytics