使用JAVA数组实现顺序栈】的更多相关文章

1,首先总结一下线性表(分为顺序表和链接表,[即顺序存储结构和链式存储结构的区别])和栈(顺序栈和链接栈)还有队列(顺序队列和链接队列)的JAVA类库中的实现: java.util.ArrayList 实现了顺序表,java.util.LinkedList 实现了链接表的功能. java.util.ArrayDeque实现了顺序栈和顺序队列(该类中即定义了与栈操作有关的方法,也定义了与队列操作有关的方法).java.util.LinkedList实现了链接栈和链接队列. 2,定义了一个Stack…
杂谈"栈"结构: 栈(Stack)是一种插入删除操作都只能在一个位置上进表,这个位置位于表的末端,叫做栈顶(Top). 对栈的基本操作有push和pop,表示进栈和出栈.也就相当于插入和删除操作. 栈结构又叫做LIFO(后进先出)表.归根结底是一个表结构,因此任何能够实现表结构的方法都能实现栈. 在java语言中,ArrayList和LinkedList都支持栈操作,栈操作都是常数时间的操作,栈的实现方式一般有两种,一种是使用顺序存储的方式,即使用数组来实现,用ArrayList可以轻…
**栈是一种操作受限制的线性表,太多官方的话我也不说了,我们都知道栈元素是先进后出的,它有两种存储结构,分别是顺序存储结构和链式存储结构. **今天我先记一下顺序存储结构,后面我会加上链式存储结构的. **我看到别人的顺序栈都是用别的方式来写的,我现在这里用的是一维数组,也就是用数组模拟.由于要用到bool型,所以我直接用c++来写,大家可以相应改成C语言的版本,并不难. **顺序栈的操作 无非是基本的八个,分别是初始化,出栈,入栈,是否为空,是否为满,取栈顶元素,取有效元素个数,遍历. **如…
**栈是一种操作受限制的线性表,太多官方的话我也不说了,我们都知道栈元素是先进后出的,它有两种存储结构,分别是顺序存储结构和链式存储结构. **今天我先记一下顺序存储结构,后面我会加上链式存储结构的. **我看到别人的顺序栈都是用别的方式来写的,我现在这里用的是一维数组,也就是用数组模拟.由于要用到bool型,所以我直接用c++来写,大家可以相应改成C语言的版本,并不难. **顺序栈的操作 无非是基本的八个,分别是初始化,出栈,入栈,是否为空,是否为满,取栈顶元素,取有效元素个数,遍历. **如…
1,引入了JAVA泛型类,因此定义了一个Object[] 类型的数组,从而可以保存各种不同类型的对象. 2,默认构造方法创建了一个默认大小为16的Object数组:带参数的构造方法创建一个指定长度的Object数组 3,实现的顺序表的基本操作有:返回表的长度.获取指定索引处的元素(注意是索引,而不是位置.索引以下标0开始,位置以下标1开始).按值查找数据元素的位置.直接插入元素(顺序表尾部).向指定位置插入元素.直接删除元素(在顺序表尾部).删除指定索引处元素.判断表是否为空.清空表. 4,在J…
一.栈的基本定义 栈是一种数据结构,它代表一种特殊的线性表,这种线性表只能在固定一端(通常认为是线性表的尾端)进行插入.删除操作的特殊线性表,通常就是在线性表的尾端进行插入.删除操作. 二.顺序栈的实现 顺序栈是利用一组地址连续的存储单元依次存放从栈底到栈顶的数据元素,栈底位置固定不变,它的栈顶元素可以直接通过顺序栈底层数组的数组元素arr[size - 1]来访问. package com.ietree.basic.datastructure.stack; import java.util.A…
package com.my; import java.util.Arrays; /** * 顺序栈 * @author wanjn * */ public class ArrayStack { private Object[] objects; private int size=0; public ArrayStack(){ objects = new Object[10]; } //入栈 public void push(Object value){ if (size>=10) { thro…
一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除操作. 先进后出:堆栈中允许进行插入和删除操作的一端称为栈顶,另一端称为栈底.堆栈的插入和删除操作通常称为进栈或入栈,堆栈的删除操作通常称为出栈或退栈. 备注:栈本身就是一个线性表,所以我们之前讨论过线性表的顺序存储和链式存储,对于栈来说,同样适用. 二.堆栈的抽象数据类型: 数据集合: 堆栈的数据…
在程序的世界,栈的应用是相当广泛的.其后进先出的特性,我们可以应用到诸如计算.遍历.代码格式校对等各个方面.但是你知道栈的底层是怎么实现的吗?现在跟随本篇文章我们来一睹它的庐山真面目吧. 首先我们先定义Stack的接口如下: package com.chen.arithmetic_test.stack_test; /** * Created by ChenMP on 2017/7/4. */ public interface Stack { //入栈 public void push(Objec…
一.分析 栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表. 顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置. 一个标准的顺序栈具有如下基本操作: 1.初始化顺序栈 2.销毁顺序栈 3.清空顺序栈 4.检测顺序栈是否为空 5.返回顺序栈中的元素个数 6.返回顺序栈的栈顶元素,不修改栈顶指针 7.…
一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除操作. 先进后出:堆栈中允许进行插入和删除操作的一端称为栈顶,另一端称为栈底.堆栈的插入和删除操作通常称为进栈或入栈,堆栈的删除操作通常称为出栈或退栈. 备注:栈本身就是一个线性表,所以我们之前讨论过线性表的顺序存储和链式存储,对于栈来说,同样适用. 二.堆栈的抽象数据类型: 数据集合: 堆栈的数据…
栈的定义 栈是限制在表的一段进行插入和删除的运算的线性表,通常能够将插入.删除的一端为栈顶,例外一端称为栈底,当表中没有任何元素的时候称为空栈. 通常删除(又称"退栈")叫做弹出pop操作,每次删除的都是栈顶最新的元素:每次插入(又称"进栈")称为压入push操作. 当栈满的时候,进行push 操作,会上溢,当空栈的时候进行退栈操作的时称为下溢. 上溢是一种出错的情况,下溢可能是正常的情况处理. 堆栈的运算是按照后进先出的原则,简称LIFO. 栈的基本运算定义: i…
package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Array_Reverse { public static void main(String[] args) { /* * 有数组a[n],用java代码将数组元素顺序颠倒 */ int a[]={11,8,2,24,90,23}; //首先可以用集合的方法把数组元素颠倒…
package dataStucture2.stack; import dataStucture2.array.MyDynamicArray; /** * 基于动态数组手写栈 * 设计时,栈中仅栈顶对用户可见 * * @param <E> */ public class MyArrayStack<E> implements Stack<E> { MyDynamicArray<E> array; //有参构造 public MyArrayStack(int c…
/*栈和队列:逻辑结构属于操作受限的线性表 *栈:特点先进后出,只允许在栈顶操作 *栈的实现方式:顺序栈和链栈 *常见的操作:进栈,出栈,获取栈顶,判空,判满,栈的容量 *栈的应用 *1.逆序相关操作 *2.分隔符匹配 * */ //顺序栈 public class MyStack { private long[] arr; private int maxSize;//栈的容量 private int top;//栈顶指针 public MyStack(int s) { maxSize = s;…
顺序栈 /** * 顺序栈 * */ public class SqStack { //栈的大小 private int maxSize; //栈顶指针 private int top; private char[] stack; public SqStack(int size){ maxSize = size; top = -1; stack = new char[maxSize]; } //压栈 public void push(char value){ stack[++top] = val…
栈的概念 先进后出策略(LIFO) 是一种基本数据结构 栈的分类有两种:1.静态栈(数组实现) 2.动态栈(链表实现) 栈的模型图如下: 需求分析 在编写代码之前,我习惯先对要实现的程序进行需求分析,比如用什么数据结构存储数据,需要实现哪些基本的功能等.这次是通过数组模拟实现栈,所以是一个静态栈,但是我在栈满时通过arraycopy函数自动扩容,后面会细说. 我们要实现的功能至少应该包含以下功能: public class Stack { private int[] array;//模拟栈 pr…
数据结构中,针对线性表包含两种结构,一种是顺序线性表,一种是链表.顺序线性表适用于查询,时间复杂度为O(1),增删的时间复杂度为O(n).链表适用于增删,时间复杂度为O(1),查询的时间复杂度为O(n). 栈可以说是特殊的线性表,因为栈拥有线性表的基础特征基础上,有一些特殊的要求,比如后进先出,即每次插入的元素只能放在栈顶,每次弹出值也只能弹出栈顶.同样的,栈分成顺序栈和链栈.本篇内容为顺序栈的实现以及简单应用. 顺序栈可以应用到很多的地方,比如递归运算,语法检查(比如括号匹配问题),数值转换(…
简单的说:Java把内存划分成两种:一种是栈内存,一种是堆内存. 1:什么是堆内存: 堆内存是是Java内存中的一种,它的作用是用于存储Java中的对象和数组,当我们new一个对象或者创建一个数组的时候,就会在堆内存中开辟一段空间给它,用于存放.堆可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,但缺点是,由于要在运行时动态分配内存,存取速度较慢. 2:什么是栈内存: 栈内存就好像一个矿泉水瓶,像里面放入东西,那么先放入的沉入底部,所以它的特点是:先进后出,后进…
当我们第一次接触堆和栈时很多人都不不明白java中为什么要设置这两个概念,他们都有什么作用?堆和栈有什么区别,各自都有什么特点?还有Java中存在栈这样一个后进先出(Last In First Out)的顺序的数据结构,这就是java.util.Stack.这种情况下,不免让很多人更加费解前面的问题.事实上,堆和栈都是内存中的一部分,有着不同的作用,而且一个程序需要在这片区域上分配内存.众所周知,所有的Java程序都运行在JVM虚拟机内部,我们这里介绍的自然是JVM(虚拟)内存中的堆和栈. 区别…
面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min()的栈,要求min.push.pop.的时间复杂度都是O(1) (6)判断栈的push和pop序列是否一致 1.栈的创建: 我们接下来通过链表的形式来创建栈,方便扩充. 代码实现: public class Stack { public Node head; public Node current; //方法…
原文地址:http://www.2cto.com/kf/201302/190704.html 简单的说: Java把内存划分成两种:一种是栈内存,一种是堆内存. 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配. 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用.      堆内存用来存放由new创建的对象和数组.      在堆中分配的内存,由Java虚拟…
--reference Java Heap Memory vs Stack Memory Difference 在数据结构中,堆和栈可以说是两种最基础的数据结构,而Java中的栈内存空间和堆内存空间有什么异同,以及和数据结构中的堆栈有何关系? 一.Java 堆存储空间 堆内存(堆存储空间)会在Java运行时分配给对象(Object)或者JRE的类.只要我们创建了一个对象,那么在堆中肯定会分配一块存储空间给这个对象.而我们熟知的Java垃圾回收就是在堆存储空间上进行的,用以释放那些没有任何引用指向…
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. Java语言中提供的数组是用来存储固定大小的同类型元素. 你可以声明一个数组变量,如numbers[100]来代替直接声明100个独立变量number0,number1,....,number99. 本博文将为大家介绍Java数组的声明.创建和初始化,并给出其对应的代码. 声明数组变量 首先必须声明数组变量,才能在程序中使用数组.下面是声明数组变量的语法: dataType[] arrayRefVar;…
数据结构顺序栈的实现(C语言版) 1.写在前面 栈是一种遵循元素先进(Push)后出(Pop)规则的线性表,它的实现可以用数组或者链表. ..... 2.代码分解 2.1对栈的结构定义: typedef struct { int *base; int *top; int stacksize; }SqStack; |说明: 1.base表示栈底指针,在判断出栈.初始化和重新分配空间的时候需要用到. 2.top表示栈顶指针,是栈最关键和核心的组成,入栈时top向上移动,出栈时top向下移动. 3.此…
//  main.cpp #include <iostream> using namespace std; #include "Status.h" typedef int SElemType; #include "SqStack.h" int main() { SqStack S; SElemType e; InitStack(S); Push(S,2); Push(S,4); Push(S,6); Push(S,8); cout<<&quo…
下面我带大家一起加深一下对Java数组的认识: 1.理解数组 数组也是一种数据类型,本身就是一种引用类型,我们从它的初始化方法,通过关键字new去完成定义及初始化就可以知道. 数组的长度是不变的,一旦数组完成初始化后,它的长度就固定下来了,在内存中占有的空间也就固定了,即使里面的数据被清空了,占有的空间还是保留下来了,依然是属于数组的,当然长度依旧是不变的. 数组里边存放的数据类型要一致,可以基本数据类型,也可以是引用数据类型,但是唯一的标准就是相同的类型.在Java中,类与类是支持继承关系的,…
Java数组的内存管理 Java语言是典型的静态语言,因此Java的数组是静态的,即当数组被初始化之后,该数组的长度是不可变的.Java程序中的数组必须经初始化才能使用.所谓初始化,就是当数组对象的元素分配内存空间,并未每个数组元素指定初始值. 数组的初始化有以下两种方式: 静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度. 动态初始化:初始化时由程序员只指定数组长度,由系统为数组元素分配初始值. Java的数组变量是一种引用类型的变量,数组变量并不是数组本身,它只是…
1. java数组的静态特性:          java是静态语言,java中数组的长度是固定的.还有,数组元素的类型也是在定义时指定了的. 2. java数组里的关键词:          数组变量 : 引用变量 , 不过这个引用的类型是数组类型.数组类型很奇特,不需要程序员来设计类的属性和方法,只要在已知的引用类型(类,接口,还有数组)后加一个[], JVM就自动生成了这样的新类型.         作为一个变量,它是存在于栈空间中的.不过由于其是一个引用变量,其所指向的内容(保存的值)是…
顺序栈就是用顺序表(数组)实现的栈.其组织形式如下图所示: 下面介绍下我用C++实现的顺序栈,在VC6下调试通过.不足之处还请指正. 1.文件组织 2.ss.h栈类的声明及宏的定义 #ifndef _SS_H_ #define _SS_H_ typedef int dataType; #define maxSize 100 class stack { public: stack(); //~stack(); void push(dataType var); //压栈 void pop(); //…