FixedCapacityStackOfString( 1.3.2.1 P82)

一种定容的存放String类型的栈的实现:创建一个String[]数组类型,并通过关键符号‘-’来判断是否进行出栈操作。
1.首先,new一个数组对象,String[] a = new String[];这个对象要new在构造函数里面,并通过传值cap(cap:覆盖的意思)进行数组大小定义。
2.需要一个定义大小的变量N,初始化为N = 0;
3.需要一个判断数组是否为空的方法isEmpty()。通过 return N == 0;判断,N == 0就返回true,否则就返回false。
4.进行push操作的方法,传入参数item。并使得a[N++] = item; 这句执行了两个操作,一个是赋值给a[N+1] = item; 另一个是执行了N ++操作。、
5.pop()方法,返回的是a[--N],同样执行了两个操作。

这样,一个字符串String[] 栈就创建好了。

然后测试方法:
1.创建一个FixedCapacityOfStack对象s,并初始化传入参数cap = 100;定义大小最大值。
2.执行循环体:while (!StdIn.isEmpty()).        每次写入一个String item = StdIn.readString();  
        通过关键字 ‘-’判断执行的操作。如果不等于equals("-"),执行s.push(item)方法。
                                                                否则如果s.isEmpty()不为空,执行pop()方法。


这就是对字符串栈的入栈push和出栈pop操作。

代码如下:
package chapter1.a3 ;

import edu.princeton.cs.algs4.StdIn ;
import edu.princeton.cs.algs4.StdOut ;

/**
* Created by fengjw on 2017/7/31.
*/
public class FixedCapacityStackOfStrings {
private String[] a ; //stack entries
private int N ; //size
public FixedCapacityStackOfStrings( int cap){
a = new String[cap] ;
}
public boolean isEmpty(){
return N == 0 ;
}
public int size(){
return N ;
}
public void push(String item){
a[ N++] = item ; //if use push() method, the parameter N will plus one **** N = N + 1;
}
public String pop(){
return a[-- N] ;
}
public String[] getA(){
return a ;
}




public static void main(String[] args) {
//P82
FixedCapacityStackOfStrings s ;
s = new FixedCapacityStackOfStrings( 100) ;
while (!StdIn. isEmpty()){
String item = StdIn. readString() ; //回车键结束
if (!item.equals( "-")){
s.push(item) ;
} else if (!s.isEmpty()){
StdOut. print(s.pop() + " ") ;
}
}

/*
下面这里是输出栈中的内容的。
*/
String[] temp = s.getA() ;
for ( int i = 0 ; i < s.size() ; i ++){
StdOut. print(temp[i] + " ") ;
}
StdOut. println() ;
StdOut. println( "(" + s.size() + " left on stack)") ;
}
}

ctrl+d结束while循环体,切记切记!!!


测试结果:
每一个字符段要有个空格隔开,包括 - 号。




代码优化为 一种泛型的抽象数据类型。


代码如下:
public class FixedCapacityStack< Item> {
private Item[] a ;
private int N ;
public FixedCapacityStack( int cap){
a =( Item[]) new Object[cap] ;
}

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

public int size(){
return N ;
}

public void push( Item item){
a[ N++] = item ;
}

public Item pop(){
return a[-- N] ;
}

public Item[] getA(){
return a ;
}

public static void main(String[] args) {
//P82
FixedCapacityStack<String> s ;
s = new FixedCapacityStack<>( 100) ;
while (!StdIn. isEmpty()){
String item = StdIn. readString() ; //回车键结束
if (!item.equals( "-")){
s.push(item) ;
} else if (!s.isEmpty()){
StdOut. print(s.pop() + " ") ;
}
}

/*
下面这里是输出栈中的内容的。
*/
Object[] temp = s.getA() ; //这里要使用Object对象。
for ( int i = 0 ; i < s.size() ; i ++){
StdOut. print(temp[i] + " ") ;
}
StdOut. println() ;
StdOut. println( "(" + s.size() + " left on stack)") ;
}

}
















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值