用数组结构实现大小固定的栈和队列

给定长度为size的数组,将其长度设置为大小为size的栈(队列),添加的数字如果超过了既定的长度就报错!

先实现栈(先进后出);

后实现队列(先进先出);

代码如下:

  1 //例子:长度为6的数组,设置大小为6的栈,超过长度就会报错
  2 //用数组结构实现大小固定的队列和栈
  3 public class Bokeyuan {
  4     //使用数组实现栈
  5     public static class ArrayStack{
  6         private Integer[] arr;//数组
  7         private Integer size;//栈
  8
  9         public ArrayStack(int initSize) {//固定数组实现栈;initSize确定数组多大
 10             if(initSize <0) {
 11                 throw new IllegalArgumentException("The init size is less than 0");
 12             }
 13             arr=new Integer[initSize];
 14             size=0;
 15         }
 16     public Integer peek() {//返回栈顶保留原值
 17         if(size==0) {
 18             return null;
 19         }
 20         return arr[size-1];
 21     }
 22     public void push (int obj) {//新进入一个数
 23         if(size==arr.length) {//当数组长度等于栈大小时不能再添加数值
 24             throw new ArrayIndexOutOfBoundsException("The queue is full");
 25         }
 26         arr[size++]=obj;//否则添加数值,size++
 27     }
 28     public Integer pop() {//当size=0,空了 报错
 29         if(size==0) {//进行数字的添加和弹出操作
 30             throw new ArrayIndexOutOfBoundsException("The queue is empty");
 31         }
 32         return arr[--size];//当size=0,将size-1位置给用户,然后size--;
 33     }
 34     }
 35
 36     //使用数组实现队列
 37     public static class ArrayQueue{
 38         private Integer [] arr;
 39         private Integer size;//约束start、end
 40         private Integer start;//表示取一个数取哪里的
 41         private Integer end;//新添加的数加到哪里
 42         /* 1.当size<n,把数放到end上
 43          * 2.当size!=0,start指的数字给用户*/
 44
 45     public ArrayQueue(int initSize) {//确定数组大小
 46         if(initSize<0) {
 47             throw new IllegalArgumentException("The initSize is less than 0");
 48         }
 49         arr=new Integer[initSize];
 50         size=0;
 51         start=0;
 52         end=0;
 53         }
 54     public Integer peek() {
 55         if(size==0) {
 56             return null;
 57         }
 58         return arr[start];
 59     }
 60     public void push(int obj) {//当size=数组长度时,报错不能继续添加数值
 61         if(size==arr.length) {
 62             throw new ArrayIndexOutOfBoundsException("The queue is full");
 63         }
 64         size++;//否则添加到end所指位置
 65         arr[end]=obj;
 66         end=end==arr.length-1? 0:end+1;//到底部的时候end跳回0,当没有到底的时候,就last+1
 67     }
 68     public Integer poll() {//弹出返回值
 69         if(size==0) {//当size=0,报错空了
 70             throw new ArrayIndexOutOfBoundsException("The queue is empty");
 71         }
 72         size--;
 73         int tmp=start;//记录start的位置
 74         start=start==arr.length-1? 0:start+1;//调整start位置,到底就返回开头,否则+1
 75         return arr[tmp];//返回
 76     }
 77     }
 78     public static void main(String[] args) {
 79         //测试栈  正好装满
 80          ArrayStack stack = new ArrayStack(3);
 81          stack.push(1);
 82          stack.push(2);
 83          stack.push(3);
 84
 85          System.out.println(stack.pop());
 86          System.out.println(stack.pop());
 87          System.out.println(stack.pop());
 88          System.out.println();
 89          //测试队列  添加的数字超过长度满了
 90          ArrayQueue queue =new ArrayQueue(2);
 91          queue.push(3);
 92          queue.push(2);
 93          queue.push(2);
 94
 95          System.out.println(queue.poll());
 96          System.out.println(queue.poll());
 97          System.out.println(queue.poll());
 98
 99     }
100     }

原文地址:https://www.cnblogs.com/Vsxy/p/10472872.html

时间: 2024-08-28 12:42:10

用数组结构实现大小固定的栈和队列的相关文章

数组拷贝、数组函数、通过数组函数来模拟数据结构的栈和队列、回调的意义、数组函数的排序问题、算法以及寻找素数的筛选法

1.数组的拷贝数组拷贝时指针的指向问题. 数组在拷贝时,指针的位置随之复制[这一点拷贝是完全一样]但是如果拷贝的数组的指针是非法的,那么拷贝出新指针的位置进行初始化<?php$arr1=array('123');end($arr1);next($arr1);//这个指针非法$arr2 = $arr1;//这里进行数组的拷贝var_dump(current($arr2));//得到指向‘123’元素的指针var_dump(current($arr1));//此时这个数组的指针有问题?> 但是拷贝

算法初级面试题03——队列实现栈、栈实现队列、转圈打印矩阵、旋转矩阵、反转链表、之字打印矩阵、排序矩阵中找数

第一部分主要讨论:栈.队列.数组矩阵相关的面试题 题目一 用数组结构实现大小固定的队列和栈 public static class ArrayStack { private Integer[] arr; private Integer size; public ArrayStack(int initSize) { if (initSize < 0) { throw new IllegalArgumentException("The init size is less than 0"

C#栈和队列

栈和队列是非常重要的两种数据结构,栈和队列也是线性结构,线性表.栈.队列这三种数据结构的数据元素以及数据元素之间的逻辑关系完全相同,差别是线性表的操作不受限制,而栈和队列的操作受到限制.栈的操作只能在表的一端进行,队列的插入操作在表的一端进行而其他操作在表的另外一端. 栈 栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表.它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来).栈具有记忆作用,对栈

数据结构与算法系列研究二——栈和队列

栈和队列的相关问题分析 一.栈和队列定义 栈和队列是两种重要的数据结构.从结构特性角度看,栈和队列也是线性表,其特殊性在于它们的基本操作是线性表的子集,是操作受限的线性表,可称为限定性的数据结构:从数据类型角度看,其操作规则与线性表大不相同,是完全不同于线性表的抽象数据类型.                    图1 栈的结构                                                 图2 队列的结构   1.1.栈是限定在表的一端进行插入和删除操作的线性

C#数据结构—栈和队列

一:栈 栈和队列也是线性结构,线性表.栈和队列这三种数据结构的数据元素以及数据元素间的逻辑关系完全相同,差别是线性表的操作不受限制,而栈和队列的操作受到限制.栈的操作只能在表的一端进行,队列的插入操作在表的一端进行而其它操作在表的另一端进行,所以,把栈和队列称为操作受限的线性表. 1:栈的定义及基本运算 栈(Stack)是操作限定在表的尾端进行的线性表.表尾由于要进行插入.删除等操作,所以,它具有特殊的含义,把表尾称为栈顶(Top),另一端是固定的,叫栈底(Bottom).当栈中没有数据元素时叫

数据结构(二)栈、队列和数组

栈 栈的定义 栈是限制在表的一端进行插入和删除的线性表.允许插入.删除的这一端称为栈顶,另 一个固定端称为栈底.当表中没有元素时称为空栈. 栈的存储实现和运算实现 栈是运算受限的线性表,线性表的存储结构对栈也是适用的,只是操作不同而已. 利用顺序存储方式实现的栈称为顺序栈. 与线性表类似,栈的动态分配顺序存储结构如 下: #define STACK_INIT_SIZE 100 //存储空间的初始分配量 #define STACKINCREMENT 10 //存储空间的分配增量 typedef s

分别用数组和链表实现栈和队列

2015.2.8星期二,晴天 栈的数组操作: 栈的特点:先进后出,后进先出. 用数组的方式实现:首先需要创建一个结构体,在结构体里面包括数据指针.指向栈顶的”指针“和标记栈的大小的一个变量.数据指针是指向一定大小的数组的首地址.结构体和这个数组够成一个完整的栈. 1.在创建栈的操作中,主要就是创建这个结构体和这个数组,并对其进行一定的初始化,这个操作和链表的创建比较类似,初始化的语句:stack->max_depth = max_depth; //说明栈的大小stack->pop = -1;

剑指offer-第二章数据结构(数组,字符串,链表,树,栈与队列)及例题

一.数组(最简单的数据结构) 定义:占据一块连续内存并按照顺序存储数据.创建时先指定大小,分配内存. 优点:时间效率高.实现简单的hash(下标为key,对应的数据为value) 缺点:空间效率差.如果我们只在数组中存一个数字,也先分配所有的内存. 扩展:动态数组(解决空间效率差),手段:扩容后,复制内容到新的数组,释放之前的内存.时间性能变差,因此,要尽量减少改变数组容量的次数. 数组与指针:声明一个数组时,数组名字也是一个指针,指向数组的第一个元素. 例题:在一个二维数组中,每一行都按照从左

【自考】数据结构第三章,栈、队列、数组,期末不挂科指南,第3篇

学习目标 自考重点.期末考试必过指南,这篇文章让你理解什么是栈.什么是队列.什么是数组 掌握栈.队列的顺序存储结构和链式存储结构 掌握栈.队列的基本操作在顺序存储结构和链式存储结构上的实现 掌握矩阵的压缩存储 今天核心咱们先把栈搞清楚 栈和队列可以看做是特殊的线性表 .它们的特殊性表现在它们的基本运算是线性表运算的子集,它们是运算受限的线性表 栈 栈(Stack)是运算受限的线性表,这种线性表上的插入和删除操作限定在表的一端进行 基本概念 栈顶:允许插入和删除的一端 栈尾:另一端 空栈:不含任何