`
12616383
  • 浏览: 51270 次
  • 性别: Icon_minigender_1
  • 来自: 待定
社区版块
存档分类
最新评论

栈的理解

阅读更多

 

1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。

2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。

 

class Stackx{
	
	public static void main(String[] args) {
		Stackx x = new Stackx(10);
		x.push(1);
		x.push(4);
		System.out.println(x.peek());
		x.pop();
		System.out.println(x.peek());
		x.push(6);
		System.out.println(x.peek());
		System.out.println(x.isFull());
		System.out.println(x.doRev("12345"));
		
	}
	
	private int maxSize;
	private long[] stackArray;
	private int top;
	
	public Stackx(int size){
		top = -1;
		stackArray = new long[size];
		maxSize = size;
	}
	
	public void push(long value){
		stackArray[++top] = value;
	}
	
	public long pop(){
		return stackArray[top--];
	}
	
	public long peek(){
		return stackArray[top];
	}
	
	public boolean isFull(){
		return (top == maxSize);
	}
	public int gettop(){
		return top;
	}
	public String doRev(String value){
		Stackx s = new Stackx(value.length());
		String output = "";
		char[] valueArray = value.toCharArray();
		System.out.println(valueArray);
		for(int i = 0; i < value.length(); i++){
			s.push(Integer.parseInt(String.valueOf(valueArray[i])));
		}
		
		while(s.gettop() != -1){
			output += s.pop();
		}
		
		return output;
	}
	
	public String toString(){
		StringBuilder sb = new StringBuilder();
		for(long v:stackArray){
			sb.append(v);
			sb.append(",");
		}
		return sb.toString();
	}
}

 

1
1
分享到:
评论
4 楼 12616383 2009-12-24  
3楼  学习了 
3 楼 liangguanhui 2009-12-23  
简单来说,在c或者C++,用new或者malloc申请的空间,是堆,而在函数里面的局部变量,则是栈。

通常,栈的变量是有程序在退出这片“代码区”的时候自动释放,而堆,则要求开发人员自己手动释放。
2 楼 12616383 2009-12-23  
刚开始学习栈啊,理解还是很初级,有问题希望大家不吝赐教
1 楼 wangtao0501 2009-12-23  
还没写完吧

相关推荐

    堆和栈的区别——软件常识

    理解堆和栈的区别是每一个程序员的基础知识,尤其在面试中常常被问及。 首先,栈(Stack)和堆(Heap)是程序运行时内存的两个主要分区。栈区由编译器自动分配和释放,主要用于存放函数参数、局部变量等。栈的操作...

    Struts2值栈的理解

    Struts2 值栈的理解 Struts2 值栈是 Struts2 框架中的一种核心机制,负责存储和管理 Action 中的数据。在 Struts2 中,每个 Action 类都有一个 ValueStack 对象,该对象贯穿整个 Action 的生命周期。在 Struts2 ...

    Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈

    Linux操作系统中的栈是一种重要的数据结构,尤其在内存管理、函数调用以及多任务处理中扮演着至关重要的角色。在Linux系统中,栈可以分为...正确理解栈的工作原理和使用方式对于软件开发人员和系统管理员都至关重要。

    KCq协议栈串口实训终端节点的编程(共11张PPT).pptx

    4. **无线通信协议栈理解**:理解协议栈如何处理事件和定时任务,以及如何在不同任务间协调工作。 这个实训有助于学习者深入理解无线通信协议栈的工作原理,特别是如何在实际应用中实现定时发送和事件驱动的通信...

    muluoleiguo#interview#理解有栈无栈协程实现1

    理解有栈无栈协程可能会有错误, 只是自己简单的理解之前一直没想明白了一个问题, 就是关于协程如何进行上下文切换.众所周知, 协程是分为有栈协程和无栈协程俩种.

    创新项目\基于物联网项目的五一总结

    【物联网项目中的Zigbee协议栈理解】 Zigbee是一种基于IEEE 802.15.4标准的低功耗、短距离无线通信技术,主要用于设备间的物联网连接。TI公司的Zigbee协议栈提供了从物理层到应用层的完整解决方案,其中包含14层...

    建立栈和栈的逆置 栈操作

    首先,我们要理解如何建立一个栈。在C++编程语言中,可以使用STL(Standard Template Library)中的`&lt;stack&gt;`库来创建栈。以下是一个简单的示例: ```cpp #include #include int main() { std::stack&lt;int&gt; ...

    顺序栈,压栈、弹栈、获得栈顶元素、统计栈中元素个数、打印栈中元素

    在给定的压缩包文件“顺序栈利用连续存储单元实现栈结构”中,可能包含了实现上述功能的C语言源代码文件,读者可以通过阅读和运行这些代码来加深对顺序栈的理解和掌握。通过实际操作和调试,能够更好地领悟到顺序栈...

    深入理解LINUX网络内幕和LINUX网络栈实现源代码分析合本

    《深入理解LINUX网络内幕和LINUX网络栈实现源代码分析合本》是一本结合理论与实践,专门探讨Linux操作系统网络层实现的书籍。通过详细分析Linux网络协议栈的源代码,读者可以深入理解Linux网络工作的核心机制。本书...

    栈运算_栈运算_perhapswcl_

    栈是一种特殊的线性数据结构,它的特点是“后进先出”(Last ...学习这些内容,可以帮助你理解如何在实际编程中使用栈进行各种运算和数据处理。熟悉栈的原理和操作,将有助于解决复杂问题,提高程序设计的效率和质量。

    两个栈空间共享,栈满打印

    描述中提到的实验目的是让学生掌握栈的两种实现方式,特别是栈空和栈满的判断条件,以及理解栈空间共享的概念及其实现方法。实验内容是设计一个程序,通过数组创建两个栈,输入一序列整数,将奇数存入第一个栈,偶数...

    栈的基本操作与原理以及内容

    ### 栈的基本操作与原理详解 #### 栈的定义与特性 栈是一种特殊的线性数据结构,其特点是只允许在...通过实际操作,如实验报告中所描述的顺序表和链表操作,学习者可以更好地理解栈的内部机制及其在实际编程中的应用。

    栈的基本操作

    正确理解和掌握这些操作对于编程和算法设计至关重要。通过上述代码示例,我们不仅了解了栈的内部实现机制,还学会了如何在实际应用中高效地使用栈进行数据处理。在未来的软件开发和问题解决过程中,栈作为一种基本的...

    栈:顺序栈和链表栈_C语言项目

    通过编写和测试这些功能,你可以更好地理解栈的工作原理及其在实际应用中的作用。 总结来说,顺序栈和链表栈是两种实现栈数据结构的方法,各有优缺点。顺序栈的优点在于访问速度快,但受限于预先分配的数组大小;...

    用栈实现计算器

    在本文件中,通过使用C++编程语言,实现了一个基于栈的计算器。该计算器采用两个栈,一个用于...通过这些知识点的学习和理解,我们可以掌握如何使用栈来实现一个基本的计算器程序,并对栈这种数据结构有更深入的认识。

    数据结构两栈共享空间C++顺序栈

    在计算机科学中,数据结构是组织和存储数据的方式,它直接影响到算法的效率。...通过这个实例,学习者不仅可以深入理解栈数据结构,还能进一步掌握C++的类设计、模板机制以及在内存管理上的优化策略。

    ZigBee入门学习指导

    总的来说,ZigBee入门涉及硬件选择、软件安装、协议栈理解以及开发工具的熟练运用。通过逐步学习和实践,开发者可以掌握创建Zigbee网络、数据传输和设备控制的基本技能。对于初学者,建议按照本指南的步骤操作,并...

    C语言实现栈与队列

    本项目是用C语言实现的栈和队列,提供了可加载和使用的源代码,这对于理解这两种数据结构的工作原理以及在C语言中如何实现它们非常有帮助。 首先,让我们详细了解栈和队列的概念: 1. 栈(Stack):栈是一种后进先...

    CANopen在arm与单片机上实现

    CANopen是一种基于CAN...总之,实现CANopen在ARM和单片机上的工作是一项涉及硬件接口、驱动编程、协议栈理解和应用层逻辑的复杂任务。但一旦完成,就能为工业自动化、汽车电子等领域提供强大且标准化的通信能力。

    栈的初始化、进栈出栈、清空栈、销毁栈

    栈是一种特殊的线性数据结构,遵循“后进先出”(LIFO)的原则。在计算机科学中,栈常被用于实现各种算法和数据处理任务,如表达式求值、递归、内存管理等。...通过这种方式,我们可以直观地理解和操作栈的各种操作。

Global site tag (gtag.js) - Google Analytics