首页 > 编程知识 正文

java数据结构栈,java用栈实现树

时间:2023-05-05 18:41:03 阅读:25495 作者:1120

堆栈:要求LIFO (后退先进先出)、自己安装堆栈,并对该堆栈要求push )、pop )、peek )、isEmpty )等基本方法。

一.利用数组实现堆栈

提示:在进入堆栈之前确定堆栈容量是否足够(如果不足,则为Arrays.copyOf ) )扩展容量

import java.util.Arrays; /** *数组实现堆栈* @param T */class Mystack1T { //实现堆栈的数组private Object[] stack; //数组大小私人int size; Mystack1() { stack=new Object[10]; //初始容量判断是否为10}//nullpublicbooleanisempty () { return size==0; (//堆栈顶部元素public T peek ) ) { T t=null; if(size0) t=) t )堆叠[ size-1 ]; 返回t; }公共语音推送(TT )扩展容量(size1; 堆叠[ size ]=t; size; public T pop () { T t=peek ); if(size0) {堆叠[ size-1 ]=null; 大小- -; }返回t; //扩大容量publicvoidexpandcapacity (intsize ) { int len=stack.length; if (大小len ) size=size*3/21; //每次扩大50%stack=Arrays.copyof(stack,size ); } } publicclassarraystack { publicstaticvoidmain [ ] args } { mystack1stringstack=new mystack1(; 系统. out.println (stack.peek ) ); system.out.println (stack.isempty ); sack.push(Java ); sack.push(is ); sack.push(beautiful ); sack.push(language ); system.out.println(stack.pop ); system.out.println (stack.isempty ); 系统. out.println (stack.peek ) ); (二、采用链表实现堆栈

/** *链表实现栈* * @param T */class Mystack2T { //链表class NodeT { private T t; 私有节点下一步; }私有节点头; //构造函数初始化标头指针mystack2({head=null; //publicvoidpush(tt ) if (t==null ) ) { throw new NullPointerException ('参数不能为空); }if(head==null ) { head=new NodeT ); head.t=t; head.next=null; } else { NodeT temp=head; head=new Node (; head.t=t; head.next=temp; (public T pop ) ) { T t=head.t; head=head.next; 返回t; //堆栈顶部元素public T peek () { T t=head.t; 返回t; //堆栈空公共布尔输入() if ) head==null )返回真; else返回假; }公共类链接堆栈{ publicstaticvoidmain (string [ ] args ) { mystack 2堆栈=new mystack2); system.out.println (stack.isempty ); sack.push(Java ); sack.push(is ); sack.push(beautiful ); 系统. out.println (stack.peek ) ); 系统. out.println (stack.peek ) ); system.out.println(stack.pop ); system.out.println(stack.pop ); system.out.println (stack.isempty ); system.out.println(stack.pop ); system.out.println (stack.isempty ); 6三、用链接列表实现堆栈

推----add first---- pop-------remove first---- peek---- get first---- isempty-isempty---- - //publicvoidpush(tt ) ) ll.addfirst ) t; public T pop () { return ll.removeFirst; //堆栈顶部元素public T peek () { T t=null; //由于直接取元素会报告异常,所以必须先判断是否为空if (ll.isempty () ) t=ll.getFirst ); 返回t; (//堆栈空的公共布尔isempty () ) { return ll.isEmpty; } publicclasslinkedliststack { publicstaticvoidmain (string [ ] args ) listackstringstack=新列表堆栈); system.out.println (stack.isempty ); 系统. out.println (stack.peek ) ); sack.push(Java ); sack.push(is ); sack.push(beautiful ); 系统. out.println (stack.peek ) ); system.out.println(stack.pop ); system.out.println (stack.isempty ); 系统. out.println (stack.peek ) ); }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。