IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 2021-09-17 项目一 -> 正文阅读

[PHP知识库]2021-09-17 项目一

项目一

编写程序,使用一维数组,模拟栈数据结构。

要求:

? 1、这个栈可以存java中的任何引用类型的数据。
? 2、在栈中提供push方法模拟压栈。(栈满了,要有提示信息。)
? 3、在栈中提供pop方法模拟弹栈。(栈空了,也有有提示信息。
? 4、编写测试程序,new栈对象,调用push pop方法来模拟压栈弹栈的动作。

知识回顾:

栈是Vector的一个子类,它实现了一个标准的后进先出的栈,栈本身最重要的就是 push 和 pop。

堆栈只定义了默认构造函数,用来创建一个空栈。堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法

Stack()

除了由Vector定义的所有方法,自己也定义了一些方法:

序号 方法描述

1	boolean empty() 
//测试堆栈是否为空。
2	Object peek( )
//查看堆栈顶部的对象,但不从堆栈中移除它。
3	Object pop( )
//移除堆栈顶部的对象,并作为此函数的值返回该对象。
4	Object push(Object element)
//把项压入堆栈顶部。
5	int search(Object element)
//返回对象在堆栈中的位置,以 1 为基数。

用栈Stack 创建对象(类型不同)

	Stack<Integer> stack = new Stack<>();
	Stack<Character> stack = new Stack<>();

压栈:将元素放到栈里

弹栈:将元素从栈取出

img

栈帧(Stack Frame)

  • 栈帧存在于 Java 虚拟机栈中,是 Java 虚拟机栈中的单位元素,每个线程中调用同一个方法或者不同的方法,都会创建不同的栈帧(可以简单理解为,一个线程调用一个方法创建一个栈帧),所以,调用的方法链越多,创建的栈帧越多(代表作:递归)。在 Running 的线程,只有当前栈帧有效(Java 虚拟机栈中栈顶的栈帧),与当前栈帧相关联的方法称为当前方法
  • 每调用一个新的方法,被调用方法对应的栈帧就会被放到栈顶(入栈),也就是成为新的当前栈帧。当一个方法执行完成退出的时候,此方法对应的栈帧也相应销毁(出栈)。
  • 栈帧结构如图:

栈帧结构

代码

package com.guyuer.array.homework;
/*
编写程序,使用一维数组,模拟钱数据结构。
要求
    1、这个栈可以存java中的任何引用类型的数据。
    2、在栈中提供push方法模拟压栈。(栈满了,要有提示信息。)
    3、在栈中提供pop方法模拟弹栈。(栈空了,也有有提示信息。
    4、编写测试程序,new栈对象,调用push pop方法来模拟压栈弹栈的动作。
 */

import java.util.SortedMap;

public class MyStack {
    //向栈中存储元素
    //Object可以存储所有类型
    private Object[] elements;

    //栈帧
    private int index;
    //private int index = -1; //表示栈帧指向顶部元素  也可以写在构造器里
    //private int index = 0;  //表示栈帧指向顶部元素上方,因为刚创建栈,栈为空,没有元素。

    //假定初始化容量为10
    //无参构造
    public MyStack() {
        this.elements = new Object[10];
        this.index = -1;
    }

    //压栈
    public void push(Object obj){
        if(index >= this.elements.length-1){
            System.out.println("栈已满,压栈失败!");
            return;
        }
        this.elements[++index] = obj;
        //重点注意:sout输出引用时,自动调用引用的toString方法。
        System.out.println("压栈"+obj+"元素成功,栈帧指向:"+index);
    }

    //弹栈
    public Object pop(){
        if(index < 0){
            System.out.println("栈已空,弹栈失败!");
            return null;
        }
        System.out.print("弹栈"+elements[index--]+"元素成功,");
        System.out.println("栈帧指向"+index);
        return null;
    }
    

    //属性私有化,提供方get,set方法
    //可能用不上,但是规矩是写上
    public Object[] getElements() {
        return elements;
    }

    public void setElements(Object[] elements) {
        this.elements = elements;
    }
}
/*
package com.guyuer.array.homework;

public class Test {
    public static void main(String[] args) {
        MyStack ms = new MyStack();
        ms.push("zhan1");
        ms.push(new Object());
        ms.push(new Object());
        ms.push(new Object());
        ms.push(new Object());
        ms.push(new Object());
        ms.push(new Object());
        ms.push(new Object());
        ms.push(new Object());
        ms.push(new Object());
        ms.push(new Object());

        ms.pop();
        ms.pop();
        ms.pop();
        ms.pop();
        ms.pop();
        ms.pop();
        ms.pop();
        ms.pop();
        ms.pop();
        ms.pop();
        ms.pop();
    }

}
 */
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 09:51:10  更:2021-09-18 09:51:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:39:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码