`

栈的实现及应用

    博客分类:
  • Java
 
阅读更多
package com.stack.sym;

public interface MyStack<T> {
	/*
	 * 属性都是public static final。 方法都是:public abstract.
	 */
	boolean isEmpty();// 判断栈是否为空

	void clear();// 清空栈

	int length();// 计算栈的长度

	boolean push(T data);// 把数据压入到栈

	T pop();// 从栈中取出数据

}
package com.stack.sym;

public class MyArrayStack<T> implements MyStack<T> {
	private Object[] objs = new Object[16];  
    private int size = 0;  
	@Override
	public void clear() {
		for (int i = 0; i < objs.length; i++) {
			objs[i]=null;
		}
		size=0;
	}

	@Override
	public boolean isEmpty() {
		return 0==size;
	}

	@Override
	public int length() {
		return size;
	}

	@Override
	public T pop() {
		if(size==0){
			return null;
		}
		return (T) objs[--size];
	}

	@Override
	public boolean push(T data) {
		/*
		 * 询问是否需要扩容
		 */
		if (size>=objs.length) {
			resize();
		}
		objs[size++]=data;
		return true;
	}
   public void resize(){
	   Object[]temp=new Object[objs.length*3/2+1];
	   for (int i = 0; i < temp.length; i++) {
		temp[i]=objs[i];
		objs[i]=null;
	}
	   objs=temp;
   }
   
   @Override  
   public String toString() {  
	   StringBuffer sb = new StringBuffer();  
       sb.append("MyArrayStack: [");  
       for (int i = 0; i < size; i++) {  
           sb.append(objs[i].toString());  
           if (i != size - 1) {  
               sb.append(", ");  
           }  
       }  
       sb.append("]");  
       return sb.toString();  
   }
   
}
package com.stack.sym;

public class Person {
	Person(int age, String sex) {
		this.age = age;
		this.sex = sex;
	}

	private int age;
	private String sex;
}
package com.stack.sym;


public class TestStack {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		MyStack<Person> myStack = new MyArrayStack<Person>();
		myStack.push(new Person(2, "nv"));
		myStack.push(new Person(5, "man"));
		myStack.push(new Person(6, "man"));
		myStack.pop();
		myStack.toString();
		System.out.println(myStack.length());//打印为2
		System.out.println(convert(3456,4).toString());
		
		
	}
	/*
	 * 将10进制正整数num转换为n进制
	 */
	private static String convert(int mun,int n){
		MyStack<Integer>myStack=new MyArrayStack<Integer>();
		Integer result=mun;
		while(true){
			
			myStack.push(result%n);
			result=result/n;
			if(result%n==0){
				break;
			}
		}
		StringBuffer sBuffer=new StringBuffer();
		while(myStack.pop()!=null){
			sBuffer.append(myStack.pop());
		}
		return sBuffer.toString();
	}
	/*
	 * 遍历字符串的每一个char, 将char与栈顶元素比较. 如果char和栈顶元素配对, 则char不入栈, 
	 * 否则将char入栈. 当遍历完成时栈为空说明字符串是合法的.
	 */
	public static boolean isMatch(String str){
		MyStack<Character>myStack=new MyArrayStack<Character>() ;
		char []arr=str.toCharArray();
		for (char c:arr){
			Character temp=myStack.pop();
			if(temp==null){
				myStack.push(c);
				
			}
			else if(temp=='['&&c==']'){
				
			}else if (temp=='{'&&c=='}') {
				
			}else {
				myStack.push(temp);
				myStack.push(c);
			}
		}
		return myStack.isEmpty();
	}  
	/*
	 *  输入行中字符'#'表示退格, '@'表示之前的输入全都无效.
     *  使用栈保存输入的字符, 如果遇到'#'就将栈顶出栈, 如果遇到@就清空栈. 
     *  输入完成时将栈中所有字符出栈后反转就是输入的结果:
	 */
   public static String lineEdit(String input){
	   MyStack<Character>myStack=new MyArrayStack<Character>();
	   char[] arr = input.toCharArray();  
	    for (char c : arr) {  
	        if (c == '#') {  
	            myStack.pop();  
	        } else if (c == '@') {  
	            myStack.clear();  
	        } else {  
	            myStack.push(c);  
	        }  
	    }  
	      
	    StringBuilder sb = new StringBuilder();  
	    Character temp = null;  
	    while ((temp = myStack.pop()) != null) {  
	        sb.append(temp);  
	    }  
	    // 反转字符串  
	    sb.reverse();  
	    return sb.toString();  
   }
}







分享到:
评论

相关推荐

    基于Linux网络协议栈实现及应用.pdf

    《基于Linux网络协议栈实现及应用》这篇文献主要探讨了Linux操作系统中的TCP/IP协议栈的实现细节和网络编程模型。Linux以其强大的网络服务功能著称,支持多种网络协议,并能提供多种网络服务,如TCP/IP、IPX/SPX、...

    栈的实现和应用(实验报告+代码)

    本实验报告将探讨如何实现栈以及其在实际问题中的应用,包括自定义顺序栈、括号匹配检查和后缀表达式求值。 首先,我们来看“实现自己的顺序栈类”。顺序栈通常是在内存中连续分配的一段空间来存储元素,它的优点是...

    java 栈的实现和应用

    本文将深入探讨Java中栈的实现以及其在实际应用中的使用。 首先,我们来理解栈的基本概念。栈是一种特殊类型的线性数据结构,其中元素的添加和删除操作(称为入栈和出栈)只在数据结构的一端进行,这一端被称为栈顶...

    栈的实现及应用,六种基本算法

    2、掌握在顺序栈上实现的六种基本算法。 2、掌握顺序栈的简单应用。 利用顺序栈将一个非负的十进制整数N转换为对应的B进制数。 [基本要求]非负的十进制整数N和B都从键盘输入;转换结果从屏幕输出。

    栈和队列的基本操作实现及其应用实验报告

    ### 栈和队列的基本操作实现及其应用实验报告 #### 实验目的 1. **熟练掌握栈和队列的基本操作**:在数组和链表两种存储结构上实现栈和队列的基本操作。 2. **应用栈和队列解决实际问题**:通过具体的编程练习,...

    算法栈的应用栈的实现

    `实验三 栈的实现及应用.doc`可能是关于这些概念的详细解释和实验指导,而`03 栈与队列.ppt`可能是相关课程的幻灯片,涵盖了栈和队列的基本理论和应用。 理解并熟练掌握栈的实现、进制转换以及括号匹配等基本算法,...

    数据结构实验——栈的实现及应用

    2、掌握在顺序栈上实现的六种基本算法。 2、掌握顺序栈的简单应用。 二、实验内容 1、利用顺序栈将一个非负的十进制整数N转换为对应的B进制数。 [基本要求]非负的十进制整数N和B都从键盘输入;转换结果从屏幕输出。

    栈和队列的应用实验 利用栈实现中缀表达式与前缀表达式的转换

    2、利用栈实现中缀表达式与前缀表达式的转换。 三、相关内容介绍 标准的表达式如"A+B",在数学上学名叫中缀表达式(Infix Notation),原因是运算符号在两个运算对象的中间。相对应的还有前缀表达式(Prefix ...

    栈实现计算器(C语言实现)

    栈在许多应用场景中都发挥着关键作用,尤其是在实现复杂计算逻辑时,如计算器的运算过程。本篇将详细介绍如何使用C语言实现一个基于栈的计算器。 首先,我们需要理解栈的基本操作:入栈(push)、出栈(pop)、查看...

    用栈实现计算器

    栈在很多算法中都有应用,如函数调用、括号匹配、表达式求值等。 知识点2:C++编程语言中的结构体(struct) C++中的结构体是一种用户自定义的类型,它可以包含不同类型的数据项。在这个计算器的实现中,使用了两个...

    栈实现表达式运算

    C语言实现栈实现表达式运算的应用,很好用,有需要的来下载。

    数据结构栈实现表达式求值

    ### 数据结构栈实现表达式求值 #### 一、引言 在计算机科学领域,数据结构是存储和组织数据的一种特殊方式,它不仅能够提高算法的效率,还能够简化复杂问题的解决过程。栈是一种非常重要的线性数据结构,遵循后进先...

    Educoder题目:数据结构-栈基本运算的实现及其应用答案解析.md

    Educoder题目:数据结构-栈基本运算的实现及其应用答案解析.md

    栈和队列的基本操作实现及其应用

    【栈和队列的基本操作实现及其应用】 栈和队列是两种重要的数据结构,它们在计算机科学和软件工程中有着广泛的应用。本实验旨在通过实际操作加深对这两种数据结构的理解,并学习如何用它们来解决实际问题。 栈是一...

    嵌入式Internet TCP IP基础、实现及应用.iso

    详述了嵌入式TCP/IP协议栈在基于ARM7 MCU的硬件平台上的实现原理,并给出了包括链路层(以太网和PPP)、IP层、运输层及应用层的一个完整协议栈实现的全部源代码。通过一个模拟的现实世界应用,展示了基于UDP和基于...

    栈的操作及应用

    栈在程序设计中有多种应用,如括号匹配、表达式求值、深度优先搜索等。 在C语言中,我们可以使用结构体来定义一个顺序栈。例如,`SqStack` 结构体包含了栈的底地址 `base`,栈顶指针 `top` 以及栈的当前最大容量 `...

    栈的一些基本的应用与实现

    本主题将探讨栈的一些基本应用以及如何实现这些功能。 1. 符号就近匹配:在编程语言解析和编译过程中,符号就近匹配是常见的应用场景。例如,当解析括号、引号等配对符号时,我们可以通过栈来检查一对括号是否正确...

Global site tag (gtag.js) - Google Analytics