【栈】
是限定仅在表尾进行插入或删除操作的线性表
表尾称为栈顶,表头称为栈底
特点:后进先出
操作:
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系统中,栈可以分为进程栈、线程栈、内核栈以及中断栈。 首先,我们需要了解栈(Stack)的基本概念。栈是一种后进先出(LIFO, Last In First Out)的数据结构,它允许数据被存储和检索,但只允许在一段称为...
### 数据结构之栈和队列知识点详解 #### 一、选择题知识点解析 1. **栈的操作原则** 栈是一种特殊的线性表,它只允许在一端进行插入和删除操作,这一端称为栈顶(top)。另一端称为栈底(bottom),不允许在其上进行...
顺序栈是一种特殊的线性数据结构,它按照“后进先出”(Last In First Out, LIFO)的原则进行操作。在顺序栈中,所有的元素都存储在一组地址连续的内存空间里,这样的设计使得访问和操作元素变得高效。栈顶元素是...
### 栈的基本操作与原理详解 #### 栈的定义与特性 栈是一种特殊的线性数据结构,其特点是只允许在一端进行插入和删除操作,这一端通常被称为“栈顶”(top),另一端则被称为“栈底”(bottom)。栈遵循后进先出...
假设给定的整数栈 初始状态为空,栈的最大容量为100.从标准输入中输入一组栈操作,按操作顺序输出出栈元素序列。栈操作:1表示入栈操作,后跟一个整数(不为1/0和-1)为入栈元素,0表示出栈操作,-1表示操作结束。从...
在计算机科学中,数据结构是组织、存储和处理数据的方式,而栈是一种基本的数据结构,被称为“后进先出”(LIFO)的数据结构。在本文中,我们将深入探讨如何用C语言实现栈,以及顺序栈的概念。 首先,我们要理解栈...
在本文件中,通过使用C++编程语言,实现了一个基于栈的计算器。该计算器采用两个栈,一个用于存储数字,另一个用于存储运算符。具体的实现细节如下: 知识点1:栈(Stack)的基本概念 栈是一种先进后出(FILO, ...
### 栈的基本操作详解 栈(Stack)是一种线性数据结构,其特点是“后进先出”(Last In First Out,LIFO)。在计算机科学中,栈被广泛应用于各种算法和程序设计中,如函数调用、表达式求值、括号匹配、回溯搜索等。...
Java栈是一种基于后进先出(LIFO)原则的数据结构,它在计算机科学和编程中具有广泛的应用。本文将深入探讨Java中栈的实现以及其在实际应用中的使用。 首先,我们来理解栈的基本概念。栈是一种特殊类型的线性数据...
标题中的“两个栈空间共享,栈满打印”指的是在C++编程中实现一个特殊的栈结构,其中两个栈共享同一个内存空间。这个结构可以用于存储整数序列中的奇数和偶数,当任一栈达到其最大容量(即“栈满”状态)时,程序会...
两栈共享空间的解决方案是设计一个数据结构,使得两个栈可以在同一块内存区域交替使用,当一个栈为空时,另一个栈可以占用全部空间。这种设计提高了内存利用率,特别是在嵌入式系统或资源受限的环境中显得尤为重要。...
在计算机科学中,栈是一种非常重要的数据结构,它遵循“后进先出”(LIFO,Last In First Out)的原则。栈的应用广泛,比如在编译器中的表达式求值、函数调用、浏览器历史记录等场景都有其身影。本话题我们将深入...
【栈和队列的基本概念】 栈是一种特殊的线性表,具有“后进先出”(LIFO,Last In First Out)的特点。栈的主要操作包括入栈(Push)和出栈(Pop)。入栈操作是在栈顶添加元素,而出栈则是删除栈顶元素。栈的应用...
栈是一种常见的数据结构,主要特点是后进先出(LIFO,Last In First Out)。在计算机科学中,栈常用于各种算法和程序设计中,如表达式求值、递归、深度优先搜索等。栈的两种常见实现方式是数组和链表,各有优缺点。 ...
"LwIP协议栈源码详解" LwIP协议栈是 lightweight TCP/IP 协议栈的实现,它是一种轻量级、开源的嵌入式系统网络协议栈,广泛应用于嵌入式系统、物联网、自动化控制等领域。LwIP 协议栈的设计目标是提供一个小巧、...
C++栈类模板 template class Stack { public: Stack(void); void Push(const T &item;); //将元素item压入栈 T Pop(void); //将栈顶元素弹出栈 void ClearStack(void); T Peek(void)const; //访问栈顶元素 ...
在IT领域,数据结构是编程基础中的重要组成部分,而栈(Stack)和队列(Queue)是最基础且广泛使用的两种数据结构。本项目是用C语言实现的栈和队列,提供了可加载和使用的源代码,这对于理解这两种数据结构的工作...
本文将深入解析一个C++中的栈类模板实现,并通过实例演示如何利用该模板来创建不同类型的栈(如整数栈、字符栈和浮点数栈)。栈是一种线性数据结构,遵循后进先出(LIFO, Last In First Out)的原则。在C++中,通过...
进行栈类模板的设计并实现,栈采用链式存储结构,数据元素可以是char,int,float 等多种数据类型,包括以下功能: 实现初始化栈操作,建立一个空栈; (1)实现清空栈操作; (2)实现判断栈是否为空的操作; (3)实现求栈长度...
标题"profinet协议栈源码"指的是这个项目是关于PROFINET通信协议的软件实现,其核心是协议栈的源代码。PROFINET是一种基于以太网技术的工业自动化网络标准,由德国西门子公司发起,广泛应用于制造业自动化领域。 ...