`
tangyanbo
  • 浏览: 269031 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

阅读更多

【栈】
  是限定仅在表尾进行插入或删除操作的线性表
  表尾称为栈顶,表头称为栈底
  特点:后进先出


  操作:
1.推入push
2.弹出pop

 

栈的数组实现

 

 

public class ArrayStack<E> {
	
	private List<E> list = new ArrayList<E>();
	
	public boolean isEmpty(){
		return list.size()==0;
	}
	
	public void push(E element){
		list.add(element);
	}
	
	public void pop(){
		list.remove(list.size()-1);
	}
	
	public E getPop(){
		return list.get(list.size()-1);
	}	
	
	public List<Integer> getElements(){
		List<Integer> result = new ArrayList<Integer>();
		for(E e : list){
			result.add(((Element)e).getValue());
		}
		return result;
	}

}

 

栈的链表实现

 

 

public class LinkedStack<E>{

	private static class Node<E>{

		E element;
		
		Node<E> next;	
		
		public Node(E element){
			this.element = element;
		}

	}
	
	private Node<E> top = new Node<E>(null);
	
	private int size = 0;
	
	public boolean isEmpty() {
		return size == 0;
	}

	public void push(E element){
		Node<E> newNode = new Node<E>(element);
		if(!isEmpty()){
			newNode.next = getPopNode();
			top.next = newNode;
		}else{
			top.next = newNode;
		}
		size++;
	}
	
	public void pop(){
		if(isEmpty()){
			throw new RuntimeException("The stack is empty");
		}
		Node<E> firstNode = top.next;
		top.next = firstNode.next;
		firstNode.next = null;
		size--;
	}
	
	public E getPop(){
		return getPopNode().element;
	}	
	
	private Node<E> getPopNode(){
		if(isEmpty()){
			throw new RuntimeException("The stack is empty");
		}
		return top.next;
	}
	
	public List<Integer> getElements(){
		if(isEmpty()){
			return null;
		}else{
			List<Integer> elements = new ArrayList<Integer>();
			Node<E> node = (Node<E>) top;
			while(node.next!=null){
				node = node.next;
				elements.add(((Element)node.element).getValue());
			}
			return elements;
		}
	}
	
}
 

 

分享到:
评论

相关推荐

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

    在Linux系统中,栈可以分为进程栈、线程栈、内核栈以及中断栈。 首先,我们需要了解栈(Stack)的基本概念。栈是一种后进先出(LIFO, Last In First Out)的数据结构,它允许数据被存储和检索,但只允许在一段称为...

    数据结构栈和队列试题及答案

    ### 数据结构之栈和队列知识点详解 #### 一、选择题知识点解析 1. **栈的操作原则** 栈是一种特殊的线性表,它只允许在一端进行插入和删除操作,这一端称为栈顶(top)。另一端称为栈底(bottom),不允许在其上进行...

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

    顺序栈是一种特殊的线性数据结构,它按照“后进先出”(Last In First Out, LIFO)的原则进行操作。在顺序栈中,所有的元素都存储在一组地址连续的内存空间里,这样的设计使得访问和操作元素变得高效。栈顶元素是...

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

    ### 栈的基本操作与原理详解 #### 栈的定义与特性 栈是一种特殊的线性数据结构,其特点是只允许在一端进行插入和删除操作,这一端通常被称为“栈顶”(top),另一端则被称为“栈底”(bottom)。栈遵循后进先出...

    C语言实现栈操作

    假设给定的整数栈 初始状态为空,栈的最大容量为100.从标准输入中输入一组栈操作,按操作顺序输出出栈元素序列。栈操作:1表示入栈操作,后跟一个整数(不为1/0和-1)为入栈元素,0表示出栈操作,-1表示操作结束。从...

    栈的C语言实现

    在计算机科学中,数据结构是组织、存储和处理数据的方式,而栈是一种基本的数据结构,被称为“后进先出”(LIFO)的数据结构。在本文中,我们将深入探讨如何用C语言实现栈,以及顺序栈的概念。 首先,我们要理解栈...

    用栈实现计算器

    在本文件中,通过使用C++编程语言,实现了一个基于栈的计算器。该计算器采用两个栈,一个用于存储数字,另一个用于存储运算符。具体的实现细节如下: 知识点1:栈(Stack)的基本概念 栈是一种先进后出(FILO, ...

    栈的基本操作

    ### 栈的基本操作详解 栈(Stack)是一种线性数据结构,其特点是“后进先出”(Last In First Out,LIFO)。在计算机科学中,栈被广泛应用于各种算法和程序设计中,如函数调用、表达式求值、括号匹配、回溯搜索等。...

    java 栈的实现和应用

    Java栈是一种基于后进先出(LIFO)原则的数据结构,它在计算机科学和编程中具有广泛的应用。本文将深入探讨Java中栈的实现以及其在实际应用中的使用。 首先,我们来理解栈的基本概念。栈是一种特殊类型的线性数据...

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

    标题中的“两个栈空间共享,栈满打印”指的是在C++编程中实现一个特殊的栈结构,其中两个栈共享同一个内存空间。这个结构可以用于存储整数序列中的奇数和偶数,当任一栈达到其最大容量(即“栈满”状态)时,程序会...

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

    两栈共享空间的解决方案是设计一个数据结构,使得两个栈可以在同一块内存区域交替使用,当一个栈为空时,另一个栈可以占用全部空间。这种设计提高了内存利用率,特别是在嵌入式系统或资源受限的环境中显得尤为重要。...

    实现栈的操作

    在计算机科学中,栈是一种非常重要的数据结构,它遵循“后进先出”(LIFO,Last In First Out)的原则。栈的应用广泛,比如在编译器中的表达式求值、函数调用、浏览器历史记录等场景都有其身影。本话题我们将深入...

    数据结构实验栈和队列详细实验报告

    【栈和队列的基本概念】 栈是一种特殊的线性表,具有“后进先出”(LIFO,Last In First Out)的特点。栈的主要操作包括入栈(Push)和出栈(Pop)。入栈操作是在栈顶添加元素,而出栈则是删除栈顶元素。栈的应用...

    栈关于数组与链表的实现

    栈是一种常见的数据结构,主要特点是后进先出(LIFO,Last In First Out)。在计算机科学中,栈常用于各种算法和程序设计中,如表达式求值、递归、深度优先搜索等。栈的两种常见实现方式是数组和链表,各有优缺点。 ...

    LwIP协议栈源码详解.pdf

    "LwIP协议栈源码详解" LwIP协议栈是 lightweight TCP/IP 协议栈的实现,它是一种轻量级、开源的嵌入式系统网络协议栈,广泛应用于嵌入式系统、物联网、自动化控制等领域。LwIP 协议栈的设计目标是提供一个小巧、...

    C++栈类模板

    C++栈类模板 template class Stack { public: Stack(void); void Push(const T &item;); //将元素item压入栈 T Pop(void); //将栈顶元素弹出栈 void ClearStack(void); T Peek(void)const; //访问栈顶元素 ...

    C语言实现栈与队列

    在IT领域,数据结构是编程基础中的重要组成部分,而栈(Stack)和队列(Queue)是最基础且广泛使用的两种数据结构。本项目是用C语言实现的栈和队列,提供了可加载和使用的源代码,这对于理解这两种数据结构的工作...

    栈类模板C++代码

    本文将深入解析一个C++中的栈类模板实现,并通过实例演示如何利用该模板来创建不同类型的栈(如整数栈、字符栈和浮点数栈)。栈是一种线性数据结构,遵循后进先出(LIFO, Last In First Out)的原则。在C++中,通过...

    栈类模板的设计与实现

    进行栈类模板的设计并实现,栈采用链式存储结构,数据元素可以是char,int,float 等多种数据类型,包括以下功能: 实现初始化栈操作,建立一个空栈; (1)实现清空栈操作; (2)实现判断栈是否为空的操作; (3)实现求栈长度...

    profinet协议栈源码

    标题"profinet协议栈源码"指的是这个项目是关于PROFINET通信协议的软件实现,其核心是协议栈的源代码。PROFINET是一种基于以太网技术的工业自动化网络标准,由德国西门子公司发起,广泛应用于制造业自动化领域。 ...

Global site tag (gtag.js) - Google Analytics