定容字符串栈

import java.util.Scanner;

public class FixedCapacityStackOfStrings {
	private String[] a;
	private int N;
	public FixedCapacityStackOfStrings(int cap){
		a=new String[cap];
	}
	public boolean isEmpty() { return N==0; }
	public int size() { return N; }
	public void push(String s){
		a[N++]=s;
	}
	public String pop(){
		return a[--N];
	}
	public static void main(String[] args) {
		FixedCapacityStackOfStrings s=new FixedCapacityStackOfStrings(100);
		Scanner cin=new Scanner(System.in);
		while(cin.hasNext()){
			String str=cin.next();
			if(!str.equals("-")){
				s.push(str);
				System.out.print("push "+str+" ");
			}
			else if(!s.isEmpty()){
				System.out.print("pop  "+s.pop()+" ");
			}
			System.out.println(" | "+s.size()+" left on stack");
		}
	}
}
//test example
to be or not to - be - - that - - - is
push to  | 1 left on stack
push be  | 2 left on stack
push or  | 3 left on stack
push not  | 4 left on stack
push to  | 5 left on stack
pop  to  | 4 left on stack
push be  | 5 left on stack
pop  be  | 4 left on stack
pop  not  | 3 left on stack
push that  | 4 left on stack
pop  that  | 3 left on stack
pop  or  | 2 left on stack
pop  be  | 1 left on stack
push is  | 2 left on stack

定容字符串栈,布布扣,bubuko.com

时间: 2024-10-11 00:56:26

定容字符串栈的相关文章

泛型定容栈

import java.util.*; //泛型定容栈 //泛型:类型参数化,便于处理不同类型的数据 public class FixedCapacityStack<Item> { private Item[] a; private int N; public FixedCapacityStack(int cap){ // java中不允许直接创建泛型数组,此处用类型转换来实现 // 这样写会有警告,但可以忽略之 a=(Item[]) new Object[cap]; } public boo

数据结构:用数组实现的定容队列

#ifndef SQ_QUEUE_HEAD #define SQ_QUEUE_HEAD #include <stdio.h> #define Status int #define OVERFLOW -1 #define OK 0 #define ERROR 1 #define QUEUE_INIT_SIZE 10 typedef int ElemType; typedef struct { ElemType data[QUEUE_INIT_SIZE]; int front;//头指针,指向第一

数据结构(1)栈的自定义实现

栈和队列是最基础的数据结构,关于他们的特性和用法我们都已十分熟悉.今天我要描述的是如何自定义实现栈这种数据结构,这能够帮助我们深入地了解栈这种数据结构的原理,也能更好地研究其他数据结构类型. 概述: 自定义实现能够动态调整的泛型栈类型,并能够保持较好地性能. 实现: 1.首先我们实现的是一种定容泛型栈类型,此种栈创建后,大小固定,十分容易实现. public class FixedCapacityStack<T> { private T[] a; private int N; public F

洛谷P1449 后缀表达式 栈 模拟 字符串

洛谷P1449 后缀表达式 栈 模拟 字符串 栈模拟一下 碰到 . 如果输入的是数字就把数字放进栈中 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <cstdlib> 5 #include <string> 6 #include <algorithm> 7 #include <iomanip> 8 #include <io

C++中堆和栈的完全解析

内存分配方面: 堆: 操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删 除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样代码 中的delete语句才能正确的释放本内存空间.我们常说的内存泄露,最常见的就是堆泄露(还有资源泄露),它是指程序在运行中出现泄露,如果程序被关闭掉的话,操作系统会帮助释放泄露的内存. 栈:在函数调用时第一个进栈的主函数中

C语言栈调用机制初探

学习linux离不开c语言,也离不开汇编,二者之间的相互调用在源代码中几乎随处可见.所以必须清楚地理解c语言背后的汇编结果才能更好地读懂linux中相关的代码.否则会有很多疑惑,比如在head.s中会看到调用main函数,在调用之前会看到几次压栈行为,在<linux内核完全注释>一书中会看到这几句汇编后面的注释说是为main函数的参数进行压栈,可是查看main的代码发现main函数根本不需要任何参数,这里为什么会有几次压入参数的动作呢?再比如fork函数中会看到有众多参数,但在调用这时却没有看

【转】堆和栈的区别

C++中堆和栈的完全解析 内存分配方面: 堆: 操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删 除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样代码 中的delete语句才能正确的释放本内存空间.我们常说的内存泄露,最常见的就是堆泄露(还有资源泄露),它是指程序在运行中出现泄露,如果程序被关闭掉的话,操作系统会帮助释放泄露的内存. 栈:在函数

DB2数据库中DB2字符串类型

DB2字符串是DB2数据库中的基础知识,下面就为您分类介绍DB2字符串,供您参考,如果您对DB2字符串方面刚兴趣的话,不妨一看. DB2字符串是字节序列.DB2字符串包括 CHAR(n) 类型的定长字符串和 VARCHAR(n).LONG VARCHAR 或 CLOB(n) 类型的变长字符串.字符串的长度就是序列中的字节数. *定长字符串,CHARACTER(n) 或 CHAR(n):定长字符串的长度介于 1 到 254 字节之间.如果没有指定长度,那么就认为是 1 个字节. *变长字符串,VA

二叉树遍历,递归,栈,Morris

一篇质量非常高的关于二叉树遍历的帖子,转帖自http://noalgo.info/832.html 二叉树遍历(递归.非递归.Morris遍历) 2015年01月06日 |  分类:数据结构 |  标签:二叉树遍历 |  评论:8条评论 |  浏览:6,603次 二叉树遍历是二叉树中最基本的问题,其实现的方法非常多,有简单粗暴但容易爆栈的递归算法,还有稍微高级的使用栈模拟递归的非递归算法,另外还有不用栈而且只需要常数空间和线性时间的神奇Morris遍历算法,本文将对这些算法进行讲解和实现. 递归