`
keating
  • 浏览: 170057 次
  • 性别: Icon_minigender_1
  • 来自: weihai
社区版块
存档分类
最新评论

堆栈小程序

 
阅读更多
//import java.util.Stack;

class testStack{

public static void main(String args[]){
  Stack stack=new Stack();  
  //注意:如果引用util包中的Stack,使用下面的格式
  //jdk1.5, 1.6中改变的形式。
  //Stack<Node> stack=new Stack<Node>();
  System.out.println(stack.empty());

  IntList list=new IntList();
  list.addFirst(3);
  list.addFirst(2);
  list.addFirst(1);
  //list.printList(); 
  //我认为这是这是一种破坏性输出;
  //它破坏了链表的结构。
  //经过这个输出,链表变为(3,null);
  System.out.print("链表长度为:");
  list.printLength();

  //stack.push(list.head);
  for(Node node=list.head;node!=null;node=node.next){
    stack.push(node);
	//System.out.println(stack.empty());
  }  

  while(!stack.empty()){ //stack不为空的话
    //堆栈倒序输出一个链表
    Node nd=(Node)stack.pop();
	System.out.print(nd+" ");
  }  
}
}


class IntList{
  int length;
  Node head;

  public IntList(){
    length=0;
    head=null;
  }

  public void addFirst(int i){
    Node newNode=new Node(i,head);
	head=newNode;
	length++;
  }

  public void printLength(){
    System.out.println(length);
  }

  public void printList(){
	  System.out.print("(");
	  while(head!=null){
		//注意null的概念,看head对象的时空为空
		//而不是看它的next
		System.out.print(head);
	    if(head.next==null){
		  break;
		}else{
		  System.out.print(",");
		  head=head.next;
		}
	  }
	  System.out.println(")");
  }
}


class Node{
  int cargo;
  Node next;

  public Node(){
    cargo=0;
    next=null;
  }

  public Node(int cargo,Node next){
    this.cargo=cargo;
    this.next=next;
  }

  public String toString(){
    return cargo+"";
  }
}

/*
必须是对象类型才可以添加到堆栈中(String,Node等);
向堆栈压入一个对象,自动转为Object类型

Java有两种类 一基础类:int,double等  二对象类 :Sring等
基础类对应了相应的内置对象类型  如
Interger(int)    Double(double)    Character(char)

方法(实例变量)前有private表示仅仅在此类中可调用
在任何外部类中都无法使用
*/

//用数组实现Stack的push,pop 《探秘java》中的
class Stack
{
	Object[] array;
	int index;

	public Stack(){
	  this.array=new Object[128];
	  this.index=0;
	}

	public boolean empty(){
	  return index==0;
	}

	public Object pop(){
	  index--;
	  return array[index];
	}

	public void push(Object item){
	  if(full())  resize();
      //at this point we can prove that index<array.length
	  array[index]=item;
	  index++;
	}

	private boolean full(){
	  return index==array.length;
	}

	private void resize(){
	  Object[] newArray=new Object[array.length*2];
	  //we assume that the old array if full
	  for(int i=0;i<array.length;i++){
	    newArray[i]=array[i];
	  }
	  array=newArray;
	}
}
2
0
分享到:
评论

相关推荐

    易语言修改线程默认堆栈大小源码

    值得注意的是,线程堆栈过大可能会导致内存浪费,而过小则可能导致线程崩溃。因此,在调整线程堆栈大小时,需要根据实际应用需求进行合理设定,确保既满足程序运行需求,又不会造成资源浪费。 在易语言中,虽然可以...

    MCS51单片机程序设计时堆栈的计算方法解析

    如果堆栈分配过小,则有可能在调用函数或处理中断时,堆栈空间不足,最终导致数据丢失或程序错误。为了避免堆栈溢出,我们需要精确计算系统分配给用户的堆栈大小以及用户程序实际所需的堆栈空间大小,确保系统分配的...

    数据结构小程序(排序算法比较、递归、堆栈)

    在这个名为“数据结构小程序”的项目中,我们主要探讨了排序算法、递归以及堆栈这三个关键知识点。 首先,排序算法是编程中最基础且实用的技术之一。排序可以让无序的数据变得有序,这对于数据分析、数据库查询等...

    STM32 堆栈检测示例

    堆栈检测在STM32开发中是一项重要的任务,它能够帮助开发者监控程序运行时的堆栈使用情况,防止堆栈溢出,从而提高系统的稳定性和安全性。 堆栈是MCU内存中的一个区域,用于存储函数调用时的返回地址、局部变量和...

    微信小程序大作业.zip

    微信小程序是一种轻量级的应用开发平台,由腾讯公司推出,主要应用于移动端,旨在提供便捷的、无需下载安装即可使用的应用体验。在这个“微信小程序大作业”项目中,我们可以看到一个学生或者团队以此为主题完成的...

    labview堆栈实现及堆栈状态机

    堆栈在实现状态机时尤其有用,因为它可以方便地管理和处理程序的不同状态。 标题“labview堆栈实现及堆栈状态机”指的是使用LabVIEW来构建和操作堆栈,并利用堆栈的概念来设计和实现一个状态机。状态机是一种用于...

    arm堆栈的操作之我见

    ARM 堆栈操作指南 ARM 堆栈操作是 ARM 架构中的一种基本操作方式,了解 ARM 堆栈操作是学习 ARM 的基础。下面是关于 ARM 堆栈操作的详细说明: 一、ARM 堆栈组织结构 ARM 堆栈组织结构是满栈降的形式,满栈即 sp ...

    C51堆栈构成与空间需求分析

    堆栈空间是其中非常重要的一部分,它用于临时存储函数调用时的返回地址和局部变量,以及为中断和子程序调用提供支持。本文将详细介绍C51堆栈的构成,以及如何进行空间需求分析,以保证系统运行时不会出现堆栈溢出等...

    MSP430_C语言编程的程序堆栈溢出分析

    ### MSP430 C语言编程中的程序堆栈溢出分析 #### 一、引言 在嵌入式系统开发中,MSP430作为一款低功耗且高性能的单片机,因其卓越的性能而备受开发者的青睐。随着越来越多原本熟悉8051单片机及其KEIL C51编译器的...

    线程堆栈大小的使用介绍示例代码

    较小的堆栈大小可以减少内存消耗,但可能导致线程无法处理复杂的任务;较大的堆栈大小则可以提供更多的空间,但会增加内存占用和上下文切换的开销。因此,合理设置线程堆栈大小是提高程序效率的关键。 为了更深入地...

    WEBVX辅助小程序

    【标题】"WEBVX辅助小程序"涉及到的主要知识点是关于微信小程序的开发和辅助工具的使用。微信小程序是一种轻量级的应用类型,它无需下载安装即可在微信平台上使用,为用户提供了便捷的服务体验。开发者可以利用微信...

    IAR编译器堆栈溢出问题查找

    堆栈溢出通常发生在程序中分配的堆栈空间不足以存储所有局部变量、函数参数和返回地址时。这可能导致数据损坏,甚至系统崩溃,对于新手开发者来说尤其具有挑战性。以下是一些关于如何查找和解决IAR编译器堆栈溢出...

    堆栈源代码实现

    在C++中,你可以使用STL(标准模板库)中的`std::stack`来直接使用堆栈,但理解其底层实现有助于你更好地优化程序。以下是一个简单的堆栈源代码实现,使用动态数组作为底层数据结构: ```cpp #include class ...

    易语言源码易语言修改线程默认堆栈大小源码.rar

    在易语言中,开发者可以通过编程来改变线程的默认堆栈大小,以满足特定的程序需求。易语言是一款中国本土开发的、面向对象的、中文编程语言,它的设计理念是降低编程难度,使得更多的人能够参与到编程中来。 线程的...

    KeilC51里关于堆栈指针的处理[参照].pdf

    在本文中,作者遇到了一个奇怪的问题,即使编译器没有报错,但程序仍然出现了自动重启的现象。经过仔细的调试和分析,作者终于发现问题所在,即堆栈指针的安排不当。 在 Keil C51 的编译时,会输出一个 M51 文件,...

    践踏堆栈攻防总结

    当程序在处理动态分配的堆栈空间时,由于没有适当的边界检查,可能导致缓冲区溢出,使得攻击者能够修改堆栈上的关键数据,比如函数返回地址,从而控制程序的执行流程。这种攻击手段通常被称为栈溢出,其变体包括堆栈...

    微信小程序开发工具

    5. **调试器**:调试器是开发过程中的关键工具,它可以监控小程序的运行状态,包括查看网络请求、调用堆栈、数据变量等,方便定位和解决问题。 6. **真机预览**:除了模拟器,开发工具还支持通过扫描二维码在实际...

    堆栈溢出调试方法合集

    在IT安全领域,堆栈溢出是一种常见的软件漏洞,它发生在程序试图在栈上分配超过其实际容量的数据时。这种漏洞可能导致系统崩溃,更严重的是,攻击者可能利用它来执行任意代码,获取系统的控制权,也就是所谓的"获取...

    C++写括号匹配堆栈

    本题目以"C++写括号匹配堆栈"为标题,旨在通过实现一个程序来检查输入的字符串或文件中的括号是否正确配对。下面将详细讨论相关知识点。 首先,我们要了解C++语言。C++是一种强大的、面向对象的编程语言,具有高效...

    抖音小程序开发者工具.rar

    抖音小程序开发者工具是一款专为字节跳动旗下的抖音平台设计的小程序开发环境,它整合了代码编辑、预览、调试和发布等一系列功能,为开发者提供了高效便捷的开发体验。这款工具是字节跳动为了扩展抖音平台的功能边界...

Global site tag (gtag.js) - Google Analytics