2024-06-27 02:33:56 | 我爱编程网
堆栈是一种执行“后进先出”算法的数据结构。
设想有一个直径不大、一端开口一端封闭的竹筒。有若干个写有编号的小球,小球的直径比竹筒的直径略小。现在把不同编号的小球放到竹筒里面,可以发现一种规律:先放进去的小球只能后拿出来,反之,后放进去的小球能够先拿出来。所以“先进后出”就是这种结构的特点。
堆栈就是这样一种数据结构。它是在内存中开辟一个存储区域,数据一个一个顺序地存入(也就是“压入——push”)这个区域之中。有一个地址指针总指向最后一个压入堆栈的数据所在的数据单元,存放这个地址指针的寄存器就叫做堆栈指示器。开始放入数据的单元叫做“栈底”。数据一个一个地存入,这个过程叫做“压栈”。在压栈的过程中,每有一个数据压入堆栈,就放在和前一个单元相连的后面一个单元中,堆栈指示器中的地址自动加1。读取这些数据时,按照堆栈指示器中的地址读取数据,堆栈指示器中的地址数自动减 1。这个过程叫做“弹出pop”。如此就实现了后进先出的原则。
堆栈是计算机中最常用的一种数据结构,比如函数的调用在计算机中是用堆栈实现的。
堆栈可以用数组存储,也可以用以后会介绍的链表存储。
下面是一个堆栈的结构体定义,包括一个栈顶指针,一个数据项数组。栈顶指针最开始指向-1,然后存入数据时,栈顶指针加1,取出数据后,栈顶指针减1。
#define MAX_SIZE 100
typedef int DATA_TYPE;
struct stack
{
DATA_TYPE data[MAX_SIZE];
int top;
};
数组实现的堆栈:ArrayStack.java
public class ArrayStack {
Object[] m_elements;
int m_size;
public ArrayStack(int len) {
m_elements = new Object[len];
m_size = 0;
}
public ArrayStack() {
this(50);
}
// insert onto stack
public void push(Object element) {
m_elements[m_size] = element;
m_size++;
}
// return and remove the top element
public Object pop() {
if (!this.isEmpty()) {
Object obj = m_elements[m_size - 1];
m_elements[m_size - 1] = null;
m_size--;
return obj;
} else {
return null;
}
}
// return the top element
public Object top() {
if (!this.isEmpty()) {
return m_elements[m_size - 1];
} else {
return null;
}
}
// return 1 --> is empty
// return 0 --> is not empty我爱编程网
public boolean isEmpty() {
return this.size() == 0;
}
public int size() {
return m_size;
}
}
使用链表实现(单链表) :
public class Stacklist {
Node m_header;
int m_size;
public ListStack() {
m_header = null;
m_size = 0;
}
public void push(Object value) {
m_header = new Node(value, m_header);
}
public Object pop() {
if (!this.isEmpty()) {
throw new RuntimeException("Stack underflow");
}
Object obj = m_header.element;
m_header = m_header.next;
return obj;
}
// return reference to most recently added elemenet
public Object peek() {
if (!this.isEmpty()) {
throw new RuntimeException("Stack underflow");
}
return m_header.element;
}
public boolean isEmpty() {
return this.size() == 0;
}
//return the number of the queue's elements;
public int size() {
return m_size;
}
}
链表的需要用到一个结点类 Node.java 代码如下
public class Node {
Object element;
Node next;
public Node(Object theElement) {
this(theElement, null);
}
public Node(Object theElement, Node n) {
element = theElement;
next = n;
}
public Object getElement() {
return element;
}
public void setElement(Object element) {
this.element = element;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
我爱编程网(https://www.52biancheng.com)小编还为大家带来求助用JAVA编写一个数据结构堆栈的演示程序的相关内容。
/** 堆栈 */
class Stack {
private String name;
private String[] buffer=new String[100];
int point=-1;
public Stack(String name){this.name=name;}
public String getName(){return name;}
public synchronized int getPoint(){return point;}
public synchronized String pop() {
this.notifyAll();
while(point==-1){
System.out.println(Thread.currentThread().getName()+": wait");
try{
this.wait();
}catch(InterruptedException e){throw new RuntimeException(e);}
}
String goods = buffer[point];
buffer[point]=null;
Thread.yield();
point--;
return goods;
}
public synchronized void push(String goods) {
this.notifyAll();
while(point==buffer.length-1){
System.out.println(Thread.currentThread().getName()+": wait");
try{
this.wait();
}catch(InterruptedException e){throw new RuntimeException(e);}
}
point++;
Thread.yield();
buffer[point]=goods;
}
}
为什么我安装了JDK后运行不了javac,但是写java和java-version都可以显示后面的一大堆东西?提示很明显,你运行的是jre里的java,而不是jdk的java.确认你安装的是jdk,还是jre?如果安装的jdk,则在系统的环境变量里,加上JAVA_HOME,在path里加上%JAVA_HOME%/bin;jre会在系统目录中安装java.exe
什么是Java?“什么是Java?”Java,由SunMicrosystems公司于1995年5月推出,它是一种可以编写跨平台应用软件、完全面向对象的程序设计语言。不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。“Java是怎么来的?”20世纪末,硬件领域出现了单片式计算机系统,这种系统价
Java的jre是什么?JRE(JavaRuntimeEnvironment,Java运行环境)是一个必须的软件集合,它使得Java程序能够在不同的设备上运行。这个环境包含了Java虚拟机(JVM)的标准实现和Java核心类库。JRE通常简称为Java运行环境,它是SunMicrosystems的产品,由两部分组成:Java运行环境和Java插件。Java运行环境是Java平台的核心,它
java中jre,跟jdk的作用分别是什么?jre是JavaRuntimeEnviroment是指Java的运行环境,是面向Java程序的使用者,而不是开发者。jdk就是JavaDevelopmentKit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDK是SoftwareDevelopmentKit一般指软件开发包,可以包括函数库、编译程序等。
java程序是什么意思java程序是什么意思?一起来了解一下吧。JAVA程序是以JAVA语言编写的,为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合。JAVA程序开发分为编写源程序,编译器编译源程序和运行字节码文件三步。拓展:Java的发展方向和可从事的岗位Java发展方向:企业级应用开发、网站开发、移动领域/游戏开发/Android开发、软件开发、嵌入式领域、
JAVA到底是做什么的?Java是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。Java不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静
Java异常机制是什么一、异常的关键字:一般来说,异常的关键字有:try、catch、finally、throw、throws。网上的资料对这几个关键字是这样解释的:try:Openingexception-handlingstatement.catch:Capturestheexception.finally:Runsitscodebeforeterminatingt
php和java区别是什么PHP和Java是两种非常不同的编程语言,它们在语法、面向对象编程、Web开发等方面都有明显的差异。首先,PHP是一种解释性脚本语言,主要用于Web开发,可以在服务器上直接执行。而Java是一种编译型语言,需要先编译成字节码,再由Java虚拟机(JVM)执行。其次,面向对象编程方面,PHP是一种面向对象的语言,但它的类和对象实现相对简单。而Java的面向对象
2025-02-01 20:24:39
2025-02-12 03:21:37
2025-02-10 15:19:48
2025-01-28 17:58:32
2024-11-22 05:08:01
2024-09-10 08:50:00