k:特殊的线性表—栈
栈(Stack):
栈是一种特殊的线性表,栈中的数据元素以及数据元素之间的逻辑关系和线性表相同,两者之间的差别在于:线性表的插入和删除操作可以在表的任意位置进行,而栈的插入和删除操作只允许在表的尾端进行。其中,允许进行插入和删除操作的一端称为栈顶,另一端称为栈底。通常,将元素插入栈的操作叫做入栈(push),而将元素从栈中进行删除并返回的操作叫做出栈(pop)。栈可以看成是一种受限的特殊的线性表,特殊性体现在它的插入和删除操作都是控制在线性表的一端进行的。其是一种后进先出(Last In First Out,LIFO)或者先进后出(First In Last Out,FILO)的线性表。
栈的API相关的接口(java):
public interface Stack<T>
{
public abstract void clear();//将一个已存在的栈置空
public abstract boolean isEmpty();//判断栈是否为空
public abstract int length();//返回栈中数据元素的个数
public abstract T peek();//读取栈顶元素并返回其值,但是不将栈顶的值从栈中进行删除,若栈为空,返回null
public abstract void push(T x)throws Exception;//将数据元素x压入栈顶
public abstract T pop();//删除并返回栈顶元素
}
ps:对于栈,其是逻辑结构中线性结构的一种,其可以采用顺序存储结构和链式存储结构。采用顺序存储结构的栈称为顺序栈,采用链式存储结构的栈称为链栈。
对于栈的实现,其可以通过改进的线性表对象直接进行实现,只要将相应的插入删除和返回值的操作约束在一端进行即可(对于链栈的实现,一般将其约束在头部进行入栈和出栈操作会节约栈的操作的时间复杂度),此处便不再对其进行实现。其中,通过此方式实现的顺序栈,所有的操作时间复杂度均为O(1),对于链栈其所有操作的时间复杂度也为O(1)(对于求取长度的操作,书上有些实现的时间复杂度是O(n),但是,实际上只要再加入一个变量对栈的长度在元素出入栈的时候进行统计,即可实现时间复杂度为O(1)的操作)
在java中,其栈可以直接采用Stack a=new Stack();(其中T为泛型变量)的方式进行对象的创建,其相应的类在java.util包中。
链栈和顺序栈的比较:
对于链栈和顺序栈,其栈的所有操作时间复杂度均为O(1),其似乎并没有什么区别。但是,链栈有一个明显的优点,便是可以动态的对元素进行添加和删除,而不需要整体移动栈中的元素。而对于顺序栈,由于其数组的大小有一个容量的限制,为此,在超过数组长度的情况下,进行括容时,需要将其原先数组的全部元素完全的复制到增加了长度的数组中,从而时间上会比链栈的操作的长。对于链栈而言,其不如顺序栈的一点在于空间的浪费上要大于顺序栈,因为其除了要存储数据元素的值之外,还要存储下对应的指向下一个节点的指针。总体而言,个人感觉使用链栈会更加好一点。当然,顺序栈肯定也有其特点,不然其也不会存在(相信存在即合理),也可能只是个人没有想到而言,以后想到了再回更。
k:特殊的线性表—栈的更多相关文章
- [PHP] 数据结构-线性表的顺序存储结构PHP实现
1.PHP中的数组实际上是有序映射,可以当成数组,列表,散列表,字典,集合,栈,队列,不是固定的长度2.数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了3.想要函数的一个参数 ...
- 第三章 线性表(C#实现)
1.线性表 概念::零个或多个数据元素的有序序列. 描述: 2.线性表的抽象数据类型: ADT线性表 Data:线性表的数据对象集合为{a1,a2,...,an},每个元素的类型均为DataType. ...
- 线性表——顺序表的实现与讲解(C++描述)
线性表 引言 新生安排体检,为了 便管理与统一数据,学校特地规定了排队的方式,即按照学号排队,谁在前谁在后,这都是规定好的,所以谁在谁不在,都是非常方便统计的,同学们就像被一条线(学号)联系起来了,这 ...
- 数据结构代码整理(线性表,栈,队列,串,二叉树,图的建立和遍历stl,最小生成树prim算法)。。持续更新中。。。
//归并排序递归方法实现 #include <iostream> #include <cstdio> using namespace std; #define maxn 100 ...
- 线性表 及Java实现 顺序表、链表、栈、队列
数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...
- [置顶] ※数据结构※→☆线性表结构(stack)☆============栈 序列表结构(stack sequence)(六)
栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线性表.栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据.栈 ...
- K:线性表的实现—链表
单链表的概念: 采用链式存储方式存储的线性表称之为链表,链表中每个节点包含存放数据元素的值的数据域和存放指向逻辑上相邻节点的指针域.若一个节点中只包含一个指针域,则称此链表为单链表. 单链表的特点: ...
- Java 线性表、栈、队列和优先队列
1.集合 2.迭代器 例子: 3.线性表 List接口继承自Collection接口,有两个具体的类ArrayList或者LinkedList来创建一个线性表 数组线性表ArrayList Linke ...
- Stack栈类与、Queue队列与线性表的区别和联系
栈和队列都属于特殊的线性表 一.定义 1.线性表(linear list): 是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列.数据元素是一个抽象的符号,其具体含义在不同的情 ...
随机推荐
- Linux下查找命令
在CentOs下查找某个目录下的某个文件,使用如下指令: find /目录 -name 文件名 eg:查找当前目录下关于hadoop的文件 find / -name hadoop
- 计算机网络课设之TCP通讯录
这篇文章我主要是想对这学期末计算机网络课程设计所做的一个小项目也就是基于tcp协议的通讯录做一个总结梳理.项目的具体的代码实现是基于C语言,当然在此之前网上也有一些基于c++编写的tcp通讯录,原理都 ...
- linux上搭建nginx+php+mysql环境详细讲解
1.mysql安装 #安装编译环境 yum install -y gcc gcc-c++ gcc-devel g++ g++-devel; yum install -y wget yum instal ...
- 常用的PHP超全局变量$_SERVER 收集整理
传送带:https://www.cnblogs.com/rendd/p/6182918.html
- 2016级算法第六次上机-B.ModricWang's FFT : EASY VERSION
1114 ModricWang's FFT EASY VERSION 思路 利用FFT做大整数乘法,实际上是把大整数变成多项式,然后做多项式乘法. 例如,对于\(1234\),改写成\(f(x)=1* ...
- 博客主题皮肤探索-添加新功能和fiddler的css/js替换
还有前言 使用了主题之后,发现还差了一点功能.最新评论没有了,导致读者回复需要一点时间去找到底回复了哪条博客.于是就有了添加功能的想法. 如何调试CSS/JS 打开f12,可以看见加载的js资源都是混 ...
- PHP队列的实现 算法
<?php /** * php队列算法 * * Create On 2010-6-4 * Author Been * QQ:281443751 * Email:binbin1129@126.co ...
- c#中异步编程
异步是现实生活中的很多现象的一种抽象.比如分工合作在很多时间段就是异步合作.异步中也一般要涉及委托方法.c#有3种模式的异步编程:异步模式,基于事件的异步模式,基于任务的异步模式(TAP). 一. ...
- 一个比较强大的HTTP请求类,支持文本参数和文件参数。
一个 http 请求类 ,支持文件上传,从淘宝 top sdk 里面扣出来的,蛮好用的,做个记录而已. 调用代码: Dictionary<string, string> textParas ...
- 关闭MAC特效
Launchpad首先打开"终端"(Finder->应用程序->实用工具->终端),并且输入以下命令:defaults write com.apple.dock ...