java队列和栈 共同_java 栈和队列的模拟--java

article/2025/9/7 4:33:58

栈的定义:栈是一种特殊的表这种表只在表头进行插入和删除操作。因此,表头对于栈来说具有特殊的意义,称为栈顶。相应地,表尾称为栈底。不含任何元素的栈称为空栈。

栈的逻辑结构:假设一个栈S中的元素为an,an-1,..,a1,则称a1为栈底元素,an为栈顶元 素。栈中的元素按a1 ,a2,..,an-1,an的次序进栈。在任何时候,出栈的元素都是栈顶元素。换句话说,栈的修改是按后进先出的原则进行的.因此,栈又称为后进先出(Last In First Out)表,简称为LIFO表。所以,只要问题满足LIFO原则,就可以使用栈。

notice:换句话说,栈就是可以一个元素进后,可以接着进行输出的表.

java 模拟栈操作:

1 packagecom.zsy.stack;2 /**

3 * 栈 java 实现 先进后出4 *@author偶my耶5 *6 */

7 public classstack {8 privateObject[] stack;9

10 //元素个数;

11 private intsize;12

13 //默认长度为10;

14 publicstack(){15 this(10);16 }17

18 //也可以自己设置长度,即容量;

19 public stack(intlen){20 stack = newObject[len];21 }22

23 //返回元素个数;

24 public intsize(){25 returnsize;26 }27

28 //返回数组长度,即容量;

29 public intcapacity(){30 returnstack.length;31 }32

33 //实现动态的数组;

34 public voidensureCapacity(){35 if(size() ==capacity()){36 Object[] newStack = new Object[size() * 3 / 2 + 1];37 System.arraycopy(stack, 0, newStack, 0, size());38 stack =newStack;39 }40 }41

42 //入栈;

43 public voidpush(Object o){44 size++;45 ensureCapacity();46 stack[size - 1] =o;47 }48

49

50

51 //判空;

52 public booleanisEmpty(){53 return size == 0;54 }55

56 //出栈;

57 publicObject pop(){58 //首先要判空;

59 if(isEmpty()){60 throw new ArrayIndexOutOfBoundsException("不能为空");61 }62

63 Object o = stack[--size];64 stack[size] = null;65 returno;66 }67

68

69 public static voidmain(String[] args) {70 stack stack = new stack(3);71 String[] data = new String[] { "a", "b", "c1" ,"f2","s3", "a4", "b5", "c6" , "a7", "b", "c"};72 for(String i:data)73 { stack.push(i);74 System.out.print(i + "\t");75 }76

77 System.out.println("\n***********************************");78 while (!stack.isEmpty()) {79 System.out.print(stack.pop() + "\t");80 }81 //}

82 }83 }

运行效果:

fcd9d7ef329cb8d24e5025d97fa1bdc8.png

队列

在java5中新增加了java.util.Queue接口,用以支持队列的常见操作。该接口扩展了java.util.Collection接口。

Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优

点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用

element()或者peek()方法。

值得注意的是LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。

java代码模拟:

1 packagecom.zsy.stack;2 /**

3 * java 队列实现 先进先出4 *@author偶my耶5 *6 */

7 public classQueue {8

9 private int maxSize; //队列长度,由构造函数初始化

10 private long[] queArray; //队列

11 private int front; //队头

12 private int rear; //队尾

13 private int nItems; //元素的个数

14

15 public Queue(int s) //构造函数

16 {17 maxSize =s;18 queArray = new long[maxSize];19 front = 0;20 rear = -1;21 nItems = 0;22 }23

24 public void insert(long j) //进队列

25 {26 if(rear == maxSize-1) //处理循环

27 rear = -1;28 queArray[++rear] = j; //队尾指针加1,把值j加入队尾

29 nItems++;30 }31

32 public long remove() //取得队列的队头元素。

33 {34 long temp = queArray[front++]; //取值和修改队头指针

35 if(front == maxSize) //处理循环

36 front = 0;37 nItems--;38 returntemp;39 }40

41 public long peekFront() //取得队列的队头元素。该运算与 remove()不同,后者要修改队头元素指针。

42 {43 returnqueArray[front];44 }45

46 public boolean isEmpty() //判队列是否为空。若为空返回一个真值,否则返回一个假值。

47 {48 return (nItems==0);49 }50

51 public boolean isFull() //判队列是否已满。若已满返回一个真值,否则返回一个假值。

52 {53 return (nItems==maxSize);54 }55

56 public int size() //返回队列的长度

57 {58 returnnItems;59 }60 public static voidmain(String[] args)61 {62 Queue theQueue = new Queue(5); //队列有5个元素

63

64 theQueue.insert(10); //添加4个元素

65 theQueue.insert(20);66 theQueue.insert(30);67 theQueue.insert(40);68

69 theQueue.remove(); //移除3个元素

70 theQueue.remove(); //(10, 20, 30)

71 theQueue.remove();72

73 theQueue.insert(50); //添加4个元素

74 theQueue.insert(60);75 theQueue.insert(70);76 theQueue.insert(90);77 while( !theQueue.isEmpty() ) //遍历队列并移除所有元素

78 {79 long n = theQueue.remove(); //(40, 50, 60, 70, 80)

80 System.out.print(n);81 System.out.print(" ");82 }83 System.out.println("");84 }85 }

运行效果:

e2beabcf6bc777432dcce369ed6e3a6b.png


http://chatgpt.dhexx.cn/article/CVt97pKY.shtml

相关文章

栈和队列学习总结

一、栈 1、特点及应用 先进后出。(如果会和队列先进先出记混的话,就记场景吧:弹栈弹栈,就是把最上面的最新进来的弹出去;而队列就像我们火车站排队检票出站一样,谁排在前面谁就先出去。) 应用的话,其实我们经常接触呀。比如Undo操作(就是撤销操作)就是使用的栈的思想…

栈和队列的共同点和不同点

堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。 要点:堆:顺序随意 栈:后进先出(Last-In/First-Out) 堆 堆:什么是堆?又该怎么理解呢? ①堆通常是一…

栈和队列实现和实例分析

目录 前言栈队列实例分析结语 前言 本篇文章主要讲述数据结构中栈和队列的实现,以及相关实例分析。 栈 注意本文所讲述的栈是数据结构的一种,并不是内存划区中的栈区,但是这两者有相似之处,即:存储数据时满足数据先…

栈和队列的共同处和不同处

共同处 栈和队列的共同处是:它们都是由几个数据特性相同的元素组成的有限序列,也就是所谓的线性表。 不同处 队列 队列(queue)是限定仅在表的一端插入元素、在另一端删除元素的线性表。 在队列中,允许插入的一端被…

索引的优缺点以及索引的设计原则

索引概述 索引(index) 是帮助 MySQL 高效获取数据的数据结构(有序)。 在数据之外,数据库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据&#xff0…

SQL数据库之索引优缺点

SQL数据库之索引使用原则及利弊 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。 优点 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 可以大大加快数据的检索速度,这也是创建…

Oracle索引的建立及优缺点

在看公司建表语句时发现了这样一段代码 本着学习的态度面向百度::::: 原来这是Oracle的索引 Oracle的索引说明 1)索引是数据库对象之一,用于加快数据的检索,类似于书籍的索引。在…

MySQL索引的优缺点

MySQL 中的索引简介 1、索引的优点 为什么要创建索引?这是因为,创建索引可以大大提高系统的查询性能。 第一、通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二、可以大大加快数据的检索速度,这也是创建索引的最…

MySQL索引的使用知识有哪些?

面试造火箭,工作拧螺丝,虽然工作时我们都在使用基本的 sql,但是不好意思,面试 90% 都在问原理,例如索引,锁,日志,引擎啊等等。 在关系数据库中,索引是一种单独的、物理的…

索引的数据结构与优缺点

1、索引的数据结构 什么是索引? 索引就是mysql为了提高查询数据的一种数据结构。在数据之外,数据库系统还维护着满足特定查找算法 的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找 算法…

Oracle 数据库:ORA-12541: TNS: 无监听程序 的解决办法

路径下D:\app\ou\product\11.2.0\dbhome_1\NETWORK\ADMIN host后面地址全改为 " HOSTlocalhost " 。 以上两个配置文件修改完成后,Win R 在弹出框中输入 " SERVICES.MSC " ,找到Oracle的服务(OracleService)…

ora12541+tns-01153未能处理字符串

操作系统: windows2008 数据库:oracle11g 数据库运行中突然连接不上 ora12541TNS:无监听程序 数据库服务器端查看: 使用dos端sqlplus登录正常 重启Oracle服务依然无法登陆 ora12541TNS plsql无法连接 使用 lsnrctl status 查看监听状态…

plsql远程访问数据库 解决 ora12170TNS 连接超时,ora-12541:TNS:无监听程序

自己在虚机linux安装了o12版本后,计划通过wins主机通过plsql操作oracle, 结果没有顺利链接,plsql报错 排错步骤: 1.查看网络是否通畅 打开cmd, ping 数据库IP 2. 查看端口是否通畅 打开cmd,tnsping 数据库IP 如果piing不通,可能是防火墙问…

ora-12541

描述:oracle 19c plsql登录报错 原因:修改了服务器的名称为ods 解决:修改listener.ora,tnsnames.ora文件中服务器名为ods,重启监听即可

oracle数据库只能用127.0.0.1和localhost登录,用ip无法登陆,提示ora12541监听错误解决办法

这些修改都在oracle安装完成后的服务端文件中修改,客户端里面的监听文件默认是没有的,也不需要配置 oracle服务端,客户端安装完成后, 服务端监听文件 E:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.or…

Oracle ORA12514 监听程序当前无法识别连接描述符中请求的服务

最简单的有可能是你的服务还没有开启,需要启动服务!!!! 在连接数据库的时候,有时会遇到一个“ORA12514:监听程序当前无法识别连接描述符中请求的服务”的错误,这个错误其实就是数据…

使用Navicat连接Oracle数据库及ORA-12541: TNS: 无监听程序、ORA-28547:connection to server failed、ORA-12514:TNS报错解决方案

1、Navicat的安装请参考:图形化界面之Navicat Premium 12 的安装与使用_蓝多多的小仓库的博客-CSDN博客_navicat premium12使用 2、打开Navicat,选择连接--->Oracle 3、配置常规和高级选项 这里服务名请参考: 为了避免后续存在权限问题,这里角色选择SYSDBA: 4、各项…

oracle报错ORA-12514

问题:oracle使用服务名orcl登录不成功,并且报错 ORA-12514, TNS:listener does not currently know of service requested in conn原因分析: ORA-12514 错误通常表示 Oracle 数据库监听器无法识别客户端请求的服务名称。这可能是由于以下原因…

Oracle ORA-12541的处理

Oracle ORA-12541的处理 Lsnrctl status Lsnrctl start 尝试链接进去sqlplus xxx/xxx198.126.12.3/fpd ps -ef | grep pmon 确定实例没有打开 查看数据库日志的停库原因 发现数据库日志是被截断的,数据库日志被截断一般是系统冗机的问题 那就直接startup开库 因…

连接linux数据库Oracle时报错ORA-12541: TNS: 无监听程序重启后提示出现ORA-01034和ORA-27101

1 windows上安装Oracle的客户端。 2 确保linux服务器上的1521端口开放 3 看你的window机器是够能够ping同linux服务器的ip地址 4 在windows中的Oracle客户端的tnsnames.ora里添加你要连接的Oracle(即虚拟里Linux的Oracle)信息。 5 虚拟机linux打开Or…