【数据结构】栈-数组的实现

首先是定义栈的基本结构,由于用数组实现

	private String[] stack;
	private int TOP = 0;

然后是构造方法

	StackOfStrings(int capacity) {
		stack = new String[capacity];
	}

然后是push,注意,TOP永远指向的是压入元素的后一位。

	public void push(String str) {
		if (TOP == stack.length) // if full, increase the stack size
			resize(2 * stack.length);
		stack[TOP++] = str;
	}

然后是pop

	public String pop() {
		String popItem = stack[--TOP];
		// if equal to 1/4, decrease the stack size
		if (TOP > 0 && TOP == stack.length / 4)
			resize(stack.length / 2);
		return popItem;
	}

然后是判空操作,想想为什么空的时候 TOP是0

	public boolean isEmpty() {
		return TOP == 0;
	}

最后附上resize的代码

	public void resize(int capacity) {
		String[] temp = new String[capacity];
		for (int i = 0; i < TOP; i++)
			temp[i] = stack[i];
		stack = temp;
	}
时间: 2024-10-28 19:08:54

【数据结构】栈-数组的实现的相关文章

数据结构——栈——寻找下一个较大元素

题目描述 给出一个数组,向右寻找每一个元素的下一个较大的元素,没有更大的则为-1 举例 {4,6,1,3,2,5} 则求得的答案应为 {6,-1,3,5,5,-1} 题目分析 首先对于这样的题目,我们总是先想到最简单的,那么就是枚举,每次循环一个元素,不停的向右找就可以了.时间复杂度应该是n^2 但是这样肯定是不够用的. 然后我们考虑,这道题我们实际上遇到的问题是什么? 其实简单的说,这道题的意思是,在变化的数组中找到下一个较大的值. 难点在于,数组元素的变化,以及不是找最大值,而是找下一个较大

利用数据结构栈求解迷宫问题

本段程序主要利用数据结构栈的先进后出特点,实现回溯求解迷宫路径问题. #include<iostream> #include<stack> using namespace std; //坐标类 struct Point { int x; int y; }; //地图类 template<int A> struct Map { int (*p)[A]; int row;//行数 int col;//列数 }; //start起始点, end终止点 template<

java数据结构栈

栈的原则是先进后出,比如一堆摞起来的书,后放上去的会被最先拿到. 栈的特点是每次只允许访问一个元素. 栈是一种抽象出来的数据结构,它的底层存储依赖于数组和链表,下面列出它的两种实现 public interface Stack <T>{ boolean isEmpty(); void clear(); int length(); boolean push(T obj); T pop(); boolean hashNext(); } public class ArrayStack<T>

数据结构-栈的实现之括号匹配检测

假设表达式中只允许两种括号:().{}:正确表达顺序为:()或{}或({})或{({}{})}的形势:如{(}或(})或({)}的表达形势均不对.算法的设计思想: 出现左括弧则进栈: 出现右括弧则首先检测栈是否为空, 若栈空则表明此右括弧多余,表达式不匹配. 否则和栈顶数据比较,若匹配则栈顶出栈. 否则表明表达式不匹配: 最后若栈空且没有做鱼右括弧则匹配正确,否则表明不匹配. 实现代码如下(Stack.h头文件为之前写的数据结构-栈的顺序结构中写的数组那个方法,用到了里面栈的结构和连个基本栈操作

基本数据结构-栈的实现及其运用

概述:数据结构是用来实现动态集合的方式.动态集合有两个要素,一是动态集合中的元素,二是动态集合上的操作如search(s,k):其中s为给定的集合,k为所要查询的关键字.Insert(s,k),delete,maximun,minimum,successor,predecessor等. 这里介绍几种简单的数据结构:栈,队列,链表,有根树. 一.栈 栈有一定限制的表,元素的插入和删除只能在表头进行,栈虽然缺少鲁棒性,但是更有效,并且很容易应用,栈后进先出.基本的操作包括进栈PUSH,出栈pop,判

数据结构——栈的类定义和实现

#include<iostream> #include<iomanip> #include<string> #include<stdlib.h> //使用库函数exit() using namespace std; template<class Type> class Stack{ private: Type*data; //栈元素数组 int maxSize; //最大栈顶值 int top; //栈顶 public: void setStac

数据结构——栈和队列相关算法实现

数据结构栈和队列的基本算法实现 限定性线性表--栈 栈的定义 栈作为一种限定性的线性表,是将线性表的插入和删除操作限制为仅在表的一端进行. 基本算法演示 /* 栈的常见操作: 1.初始化栈 2.元素进栈 3.元素出栈 4.栈的遍历 5.判断栈是否为空栈 6.清空整个栈 */ # include <stdio.h> # include <stdlib.h> typedef struct Node { int date; struct Node * pNext; }NODE,* PNO

java数据结构——栈

学习数据结构与算法是枯燥的,但只有坚持不懈的积累,才会有硕果累累的明天. /** * 继续学习Java数据结构 ————栈 * 栈的实现其实还是使用数组,只不过我们不能直接访问数组下标,而是通过一个指针来对其进行操作 * 栈的重要数据特性————先进后出(后进先出) * 压入.弹出.访问.是否空.是否满 */ public class Stack { private long arr[]; private int top;// 指针 public Stack(int Maxsize) {// 构

数据结构---栈及四则运算实现

假设我们要求输入类似这样一个表达式:9+(3-1)*3+10/2,输出结果.我们知道先括号,再乘除,最后加减,中学时候使用的科学计算器,是允许输入这样的表达式计算结果的,那么计算机怎么知道这个串里面先算括号再算乘除呢?我们先来介绍下栈这种数据结构,再来解决这个问题. 前面已经说过数组的连表,现在来说另外一种线性表的数据结构---栈. 举个比较形象的例子,洗盘子的时候,是不是一个一个往上面堆着放,拿的时候也从上面一个一个的拿,最先放的在最下面,最后放的在最上面,拿的时候第一个拿到.这就是典型的栈结

南阳OJ-2 括号配对 (数据结构-栈的应用)

括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100),表示有N组测试数据.后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组.数据保证S中只含有"[","]","(",")"四种字符 输出 每组输入数据的输出占一行,