zoukankan      html  css  js  c++  java
  • java数据结构经典问题

    A:栈抽象数据类型

    1.栈的主要操作

      void push(int data);将data数据插入栈中。

      int pop();删除并返回最后一个插入栈的元素.

    2.栈的辅助操作

      int top();返回最后一个插入栈的元素,但是不删除

      int size();返回存储在栈中元素的个数

      int isEmpty();判断栈中是否有元素

      int isStackFull();判断栈中是否存满元素

    B:栈中的异常

    在栈为空时pop操作和top操作都会抛出异常。在栈为满的时候执行push操作也会抛出异常。

    C:栈的实现

    1:基于简单数组的实现方法

    2:基于动态数组的实现方法

    3:基于链表的实现方法

    1:简单数组实现

      如图所示:从左到右向数组中添加所有的元素,并且定义一个变量用来记录数组当前栈顶元素的下标

                 

                                     s                                               |top(栈顶)

    当数组中存满了栈元素的时候,执行入栈操作就会抛出栈满的异常,当对一个空栈执行删除元素的操作,就会抛出栈空异常。

    代码如下:

    package airycode;
    
    public class ArrayStack {
    
    	private int top;
    	private int capacity;
    	private int[] array;
    	
    	public ArrayStack(){
    		capacity = 1;
    		array = new int[capacity];
    		top = -1;
    	}
    	
    	public boolean isEmpty(){
    		return top == -1;
    	}
    	
    	public boolean isStackFull(){
    		return top == capacity-1;
    	}
    	
    	public void push(int data){
    		if(isStackFull()){
    			System.out.println("Stack Overflow");
    		} else {
    			array[++top] = data;
    		}
    	}
    	
    	public int pop(){
    		if (isEmpty()) {
    			System.out.println("Stack is Empty");
    			return 0;
    		} else {
    			return array[top--];
    		}
    	}
    	
    	public void deleteStack(){
    		top = -1;
    	}
    	
    }
    

      性能和局限性

    性能分析:假设n为栈中元素的个数。在基于简单数组的栈实现中。各种栈操作算法复杂度如下表所示:

    简单数组实现栈性能分析
    空间复杂度(用于n次push操作) O(n) isEmpty()的时间复杂度 O(1)
    push()的时间复杂度 O(1) isStackFull()的时间复杂度 O(1)
    pop()的时间复杂度   O(1) deleteStack()的时间复杂度 O(1)
    size()时间复杂度 O(1)    

    局限性:栈的最大空间必须预先声明且不能改变。试图对一个满栈执行入栈操作将产生一个针对简单数组这种特定实现栈方式的异常。

  • 相关阅读:
    织梦DedeCms网站首页不生成html文件动态显示方法
    PHP7.0下安装DEDE织梦 出现 GD不支持的解决方法
    DEDECMS5.7支持伪静态的方法
    DEDECMS全站伪静态设置方法
    设置 SSH 通过密钥登录
    Windows安装OpenSSH服务
    VS Code远程开发工具错误-找不到SSH安装
    帝国CMS自定义列表的排序
    帝国CMS灵动标签e:loop的使用方法
    cisco 3750交换机堆叠后配置恢复方法
  • 原文地址:https://www.cnblogs.com/airycode/p/8675248.html
Copyright © 2011-2022 走看看