//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;
}
}
分享到:
相关推荐
在本文中,作者遇到了一个奇怪的问题,即使编译器没有报错,但程序仍然出现了自动重启的现象。经过仔细的调试和分析,作者终于发现问题所在,即堆栈指针的安排不当。 在 Keil C51 的编译时,会输出一个 M51 文件,...
主要是针对数据结构课程的一些作业,涉及又递归、堆栈和排序。用的是C语言编写,需要的请下载。
应该说,Cx51是C语言在MCS51单片机上的扩展,既有C语言的共性,又有它自己的特点。本文介绍的是Cx51程序设计时堆栈的计算方法。
学习arm必须了解堆栈的操作! 学习arm必须了解堆栈的操作!
kill - 3 线程编码获取应用的堆栈信息,可通过jca查看堆栈信息,查看每个线程的运行状态,对分析程序有很大的帮助。
堆栈的实现,程序完全可以实现运行,帮助大家学习和开发
运用堆栈相关知识,创建栈,出栈,入栈,判断栈是否空?实现括号匹配小程序.
运用从语言编写的实用小程序,在程序中还利用了链表、堆栈、队列等知识,着重处理了算符的优先级。
该程序表示如 mov ds,ax ;将data段与ds关联 mov ax,stack mov ss,ax ;将stack段与ss关联 mov sp,10h ;设置栈顶 xor bx,bx ;mov bx,0一个效果 mov ax,0b872h ;放置第一个字符串的首地址 mov ...
一个最小的社交网络应用程序,具有完整的堆栈
堆和栈是两个不同的概念 堆和栈的区别 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个...虽然堆栈,堆栈的说法是连起来叫,但是他们还是有很大区别的,连着叫只是由于历史的原因。
对于操作系统内存中的缓存区溢出的基本原理进行阐述,内嵌有小例子
这是自己所编的一个用堆栈实现计算器的小程序,相信学习数据结构课的同仁会需要
这个程序实现了用递归实现小量数据和用自定义堆栈实现大量数据的排序实现(编译环境uCOS-II VS2008) 潜在BUG: 在大容量数据的分配上,是无法使用数组实现的,必须分配内存空间,在堆栈的处理上,使用了数组,由于...
数组、链表、堆栈和队列是最基本的数据结构,任何程序都会涉及到其中的一种或多种。数据结构是指数据之间的相互关系,即组织形式,有逻辑结构和物理结构之分。逻辑结构有线性和非线性之分,而物理结构则是描述数据在...
console.log(result.data.msg) // 抛出错误2、记录用户操作路径,更方便重现错误小程序使用1、引入资源在app.js中加入dist目录下的xbossdebug.min.js,记得放在App对象上面var xbossdebug = require('...
MERN堆栈约会计划和员工/客户管理应用程序·· 背景 Glow Labs是一家小型企业,一直在使用进行约会预约,管理客户和员工以及将其用作销售点(POS)系统。 其使用构建的网站在iframe中显示了Square预订工作流程。 它...
算法与数据结构的C#具体实现,具体视频里面有10种左右常见的算法,入RK算法,队列,堆栈等数据结构的使用
Mac OS X 内核将堆栈大小 ( MAXSSIZ )“硬编码”为 64MB。 但是,请查看xnu/bsd/kern/mach_loader.c load_main例程中的内核代码: if (epc->stacksize) { result-> prog_stack_size = 1 ; result-> user_stack_size...