队列,栈,链表,学习中的一次总结(1)

经过一段时间的java学习后,在老师的引领下,做了一个终极阉割版的画图软件,可以实现的功能有限,未实现的功能被当作扩展。

上面是老师带领下的版本,可以通过单选按钮来选择绘画的图形;实现了鼠标左键绘制图形颜色为颜色1,右键绘制图形颜色为颜色2.;一些常用不可改变的颜色选择,通过点选按钮:颜色1和颜色2 来改变左右键的颜色。在颜色选择面板下预留了可以自定义的颜色框;

通过点击编辑颜色按钮弹出位于屏幕中央(可变化)的颜色编辑板,在颜色编辑板上选择的颜色会改变常用颜色选择面板最下方预留出来的自定义颜色选择框,如图

通过多次点击后会填满自定义框:

可以看到在改变自定义框时也改变了选中的颜色按钮的颜色。这时当自定义框填满后,再一次点击后:

会发现会改变第一个自定义框的颜色。但这是不符合常用颜色选择框设计的。因为越后面的自定义是越接近你现在时间选择的。也就是说第一个自定义框是离你最久远的 可当你选择第七个颜色后,第七个会代替第一个,但实际上第七个应该代替第六个,也就是说第七个会挤进自定义框变成第六个,第一个会被挤出自定义框,第二个成为了第一个。

  这个现象是可以通过数组,判断,循环来实现的。但最近学习 栈和队列的定义后,我又有了新的想法,上述说的过程不就可以简化为先放进自定义框里的颜色最先被挤出去,也就是队列的定义FIFO: First in First Out。栈LIFO:Last In First Out。

上面的是我最开始的代码。

这个是通过队列来实现的代码。

上面的是实际效果图,可以看到我的想法是可以实现的,也许很笨拙,但还是很开心,证明我在思考相似问题时会考虑运用栈,队列,链表的相关知识,当然上面我运用的是 可变数组来实现队列,我们还可以运用链表来实现队列。

第一次总结就到这里,只是简单的栈,队列,链表的应用,个人也在努力的还原电脑自带画图板的功能,看老师写的时候觉得没什么,但自己开始实现其他功能是会发现很难,思路,头绪都是难题,每当我实现一个功能我都会发一个总结来记录一下成长。

原文地址:https://www.cnblogs.com/lxm-blog/p/9052234.html

时间: 2024-11-06 11:29:28

队列,栈,链表,学习中的一次总结(1)的相关文章

《啊哈算法》——栈、队列、链表

通过题目我们可以看出这篇文章将介绍什么,栈.队列.链表本质上是数据结构中的东西,通过这章的学习能够给今后数据结构的学习打下一点基础. 队列: 我们通过一个简单的谜题来引入队列的概念,给出一串9位的加密QQ号,对于这串数字,删除第一位数字,然后将第二位数字放到这串数字的最后.反复操作,直到这一串数字的所有数字都被删除.在这个过程中,按照数字删除先后顺序排列的9位数字的便是解密后的QQ号,请问解密后的QQ号是多少? 其实从数学原理的角度,这个问题并没有什么难度,非常好理解,但关键在于,如何通过程序来

数据结构(栈,队列,链表,二叉树)

栈 栈作为一种数据结构,用途十分广泛.在回调函数等许多场景中都有应用.我们需要了解它的基本用途,那就是先进后出和队列的先进先出正好相反. 最近在学习数据结构和算法,于是自己来实现.我特别喜欢C语言的指针,我发现很好用,于是用C++来实现一个简单的范例. 主要实现就是函数就是Pop,Push Push将数据放到一个到顶层位置. Pop将数据从已有的数据中取出来. Stack.h文件,主要描述里面的数据,数据我用整形来处理,这个也可以是其他,只是示范 typedef struct mData { i

算法导论第十章 栈队列和链表

本章讲述的是基本的数据结构,如栈.队列和链表.这些都是最最基本的数据结构,具体的就不再啰嗦.然后本章也没有什么需要特别注意的点,哦,有一个小节:指针和对象的实现,可以认真看一下,大概就是用其他的实现方式来代替指针和对象的实现,因为有些语言不支持指针和对象数据类型,那在实现这种链式的数据结构就无法表示,本节介绍的方法就是利用数组和数组下标来构造对象和指针,说白了,就是利用数组来表示链式对象.个人感觉意义不大,权当了解得了. 结合一些常见的笔试面试题,我就用3个习题来总结这一章吧. 1.习题10.1

垃圾回收机制和数据结构栈链表

1.垃圾回收机制: (1)没有引用变量指向的对象,就是垃圾. 举例: Test t = new Test(); t=null; 那么之前创建的对象就是垃圾. (2)对象没有被使用是另外一种垃圾. new Test(); new Test().toString(); 区别在于第一个对象很明显没有指向,是垃圾.但是第二个不是,因为他被使用了. 2.回收时机. 通常情况下,要在满了的时候回收. 其次在调用 System.gc();//通常情况下会立刻回收.等效于Runtime.getRuntime.g

转载:堆和栈的学习

堆和栈的区别一.预备知识—程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.2.堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 .注意它与数据结构中的堆是两回事,分配方式倒是类似于链表.3.全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初

队列(二)——队列的链表实现方式

1.队列的单向链表的实现方法 return只可以返回一个值,单向循环链表来实现队列的时候可以只保留一个指针,因为保留rear指针能够很方便的表示出front指针,所以保留rear指针. 另外由于链表的第一个结点处理比较特殊,所以在初始化的时候需要单独处理.链表实现的队列思想也是第一个单元作为头结点,不存放数据,rear指针指向的总是尾结点(在循环链表中也就是头结点的上一个结点). 2.实现方法 用带表头的单向循环链表来实现 #include <stdio.h> #include <mal

RabbitMQ (消息队列)专题学习07 RPC

(使用Java客户端) 一.概述 在Work Queue的章节中我们学习了如何使用Work Queue分配耗时的任务给多个工作者,但是如果我们需要运行一个函数在远程计算机上,这是一个完全不同的情景,这种模式通常被称之为RPC. 在本章节的学习中,我们将使用RabbitMQ来构建一个RPC系统:一个远程客户端和一个可扩展的RPC服务器,我们没有任何费时的任务进行分配,我们将创建一个虚拟的RPC服务返回Fibonacci数. 1.1.客户端接口(Client Interface) 为了说明一个RPC

栈——链表实现

引言: 栈是先进后出的数据结构类型.在许多应用中也会经常用到,比如迷宫的求解时会用到栈结构.掌握栈的基本操作对于解决问题,有很大的帮助,尤其是编程中经常用到的递归的思想,就是栈的一个例子. 分析描述: 栈的实现有两种方法,一种是用链表来完成.这种方法比较简单,我们先掌握这种方法.另一种是用顺序表(即数组)来实现栈.下一节会介绍到. 栈节点描述. typedef int ElemType; typedef struct Node{ ElemType data; struct Node *next;

队列的简单学习

/**  * 1.在Java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口.  *   * Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取  * 或移除的元素.他们的优点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常.  * 如果要使用前端而不移除该元素,使用element()或者pe