Java中集合(三)Stack

来源:互联网 发布:python return{} 编辑:程序博客网 时间:2024/06/05 18:40

一、概述

  1. 先进后出。
  2. 将元素放入栈中---入栈、压栈 ;将元素从栈中取出 --- 出栈、弹栈。
  3. 最先放入 栈中的元素--- 栈底元素;最后放入栈中的元素 --- 栈定元素。
  4. 基于Vactor。(参考:http://blog.csdn.net/chou_out_man/article/details/78053955)。
  5. 底层是数组。内存空间连续,查询较快,增删较慢。

二、方法摘要

  1. push() : 向栈中添加一个元素 --- 入栈
  2. pop() ; 移除栈顶元素 --- 出栈
  3. peek() : 获取栈顶元素但不移除
  4. search() ; 获取指定元素在栈中的位置 ,从栈顶开始找,基数为1。
    public static void main(String[] args) {Stack<String> s = new Stack<String>();//入栈 ,左边为栈底,右边为栈顶s.push("a");s.push("b");s.push("c");s.push("d");System.out.println(s);//出栈String str = s.pop();System.out.println(str);//获取而不移除栈顶元素String str1 = s.peek();System.out.println(str1);System.out.println(s);//判断是否是一个空栈System.out.println(s.isEmpty());//获取元素在栈中出现的位置,查找元素时是从栈顶到栈底查找,以1为基数、System.out.println(s.search("a"));}

练习: 1. 用Vactor实现Stack
2.   用数组实现Stack
1. /** * 用Vector实现Stack * */public class Demo_01 {public static void main(String[] args) {jiazhuanStack1 j = new jiazhuanStack1();//添加元素j.push("a");j.push("b");j.push("c");j.push("d");System.out.println(j);//弹出栈顶元素j.pop();System.out.println(j);//读取栈顶元素但不弹出String str = j.peek();System.out.println(str);System.out.println(j);//判断是否时空栈System.out.println(j.isEmpty());//获取指定位置的元素System.out.println(j.search("a"));}}class jiazhuanStack1{private Vector v;public jiazhuanStack1() {v=  new Vector<String>();}//入栈public void push (String str){v.add(str);}//出栈public void pop(){v.remove(this.peek());}//获取栈顶元素而不移除public String peek(){if(v.isEmpty()){throw new EmptyStackException();}return (String) v.lastElement();//返回栈顶元素}//判断是不是空public boolean isEmpty(){return v.isEmpty();}//获取指定元素的位置public int search(String str ){int index = -1;  int i = 0;if(str==null){return index;}Enumeration e = v.elements();String str1 = null;while(e.hasMoreElements()){str1 = (String) e.nextElement();if(str1.equals(str)){break;}i++;}return i>=0? v.size() -i:index;}@Overridepublic String toString() {StringBuilder sb = new StringBuilder();sb.append("[");for(int i =0;i<v.size();i++){sb.append(v.get(i)+",");}String str = sb.toString();str  = str.substring(0,str.length()-1);str+="]";return str;}}2./** * 用数组实现 Stack * */public class Demo_02 {public static void main(String[] args) {jiazhuangStack2 j = new jiazhuangStack2();//添加元素j.push("a");j.push("b");j.push("c");j.push("d");System.out.println(j);//弹出栈顶元素j.pop();System.out.println(j);//读取栈顶元素但不弹出String str = j.peek();System.out.println(str);System.out.println(j);//判断是否时空栈System.out.println(j.isEmpty());//获取指定位置的元素System.out.println(j.search("a"));}}class jiazhuangStack2{private String[] ss;private int   size;public jiazhuangStack2() {ss = new String[10]; size = 0;}//入栈public void push(String str ){if(str == null){throw new NullPointerException();}else if(size>=ss.length){//数组扩容一倍Arrays.copyOf(ss, ss.length<<       2);}else{ss[size] = str;size++;}}//出栈public String pop(){String str = this.peek();size--;return str;}//获取栈顶元素并不移除public String peek(){String str = null;if(ss.length<0){throw new EmptyStackException();}else if(size<=0){//System.out.println("栈中没有元素");return str;}else{str  = ss[size-1];return str;}}//判断是不是空栈public boolean isEmpty(){return size>0?false :true;}//获取指定元素的位置public int search(String str){for(int i = 0;i<size-1;i++){if(ss[i].equals(str)){return size - i;}}return -1;}@Overridepublic String toString() {StringBuilder sb = new StringBuilder();sb.append("[");for(int i =0;i<size;i++){sb.append(ss[i]+",");}String str = sb.toString();str  = str.substring(0,str.length()-1);str+="]";return str;}}



原创粉丝点击