数据结构之栈

目录

一.内存中的堆栈和数据结构的堆栈

                      内存空间在逻辑上划分用三部分:代码区  静态数据区  动态数据区

二.栈的基本操作

三.关于栈的一些常见问题


一.内存中的堆栈和数据结构的堆栈

数据结构中堆栈与内存中的堆栈是完全不同的两个概念。内存当中的堆栈是真实存在的物理区域,而数据结构中的堆栈是人为抽象出来的一种逻辑存储结构

  • 内存中的堆栈

 内存空间在逻辑上划分用三部分:代码区  静态数据区  动态数据区

      代码区:存放程序的二进制代码,即cpu的机器执行指令。

      静态数据区:存放常量(包括final修饰的常量和String修饰的常量),静态变量(static修饰的变量),全局变量

      动态数据区(包括堆和栈):

          堆区: New的对象存放在堆区中。由程序员手动分配和回收,如果不手动释放也可能由OS回收。类似于链表,在内存中是不连续分配的,在不同区域通过指针链接起来。栈区的存储速度比堆区速度低。

          栈区: 存放方法的局部变量,形参和返回值。由编译器自动进行回收。逻辑结构类似于数据结构当中的堆,是一块连续的内存区域。栈区的存储速度比堆区的存储速度要快。

  • 数据结构中的堆栈

       栈:是一种简单的线性数据结构。把可以进行存储和取出元素的一端称为栈顶,把不可操作的另一端称为栈底。其特点是存储  的数据遵从先进后出的原则。

   

       堆:是一棵完全二叉树结构,特点是父节点的值大于(小于)两个子节点的值(分别称为大顶堆和小顶堆)。

二.栈的基本操作

  •     栈的创建
  •     入栈操作push
  •     出栈操作pop
  •     得到栈顶元素
  •     移除栈顶元素
  •     空栈判断
  •     满栈判断
  •     遍历栈

    JAVA数组实现栈:

     

public class MyStack {	
	 private int top;                     // 栈顶指针
	 private int MaxVaule;                // 栈的长度
	 private int MyArray[];               // 数组
	 
	 public MyStack(){                    // 无参构造
		 MyArray=new int[20];
	     top=-1;
	 }
	 
	 public MyStack(int MaxValue){        //创建指定长度的栈
		MyArray=new int[MaxValue];
		this.MaxVaule=MaxValue;
		top=-1;
	 }
	 
	 public boolean IsFull(){             //栈满判断
		 return top>=MaxVaule-1;
	 }
	 
	 
     public boolean IsEmpty(){          //栈空判断
    	 return top <=-1;
     }
	 
	 public void push(int data){       //入栈
		 if(IsFull()){
			 System.out.println("The Stack is full");
			 return;
		 }
		 else 
			 MyArray[++top]=data;
	 }
	 
	 public int  pop(){                //出栈
		 if(IsEmpty()) {
			 System.out.println("The Stack is empty");
			 return  0;
		 }
		 return MyArray[top--];
	 }
	 
	 public int  getTopData(){      //获取栈顶元素
		 return MyArray[top];
	 }
	 
	 public void removeTopData(){   //移除栈顶元素
		 MyArray[top]=0;
		 --top;
	 }

     public void show(){            //遍历堆栈
    	 for(int i=MyArray.length-1;i>-1;i--){
    		 System.out.println(MyArray[i]);
    	 }
     }
	 
}

三.关于栈的一些常见问题

  •   使用栈计算后缀表达式
  •   对栈的元素进行排序
  •   判断表达式是否括号平衡
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值