数据结构和算法分析 表、栈和队列

表是ArrayList,LinkedList,Stack,Queue的抽象定义。我理解为有序的单数据存储。

remove方法对LinkedList类的使用

模拟一个场景,遍历一个LinkedList,将其中存储的数值是偶数的都删除。

  • 方法一:通过下标i进行for循环,如果发现是偶数,然后使用remove(i)进行删除。这种方法的时间复杂度是O(N2),因为外层遍历的复杂度是N,内存要进行get(i)和remove(i)他们的复杂度都是N。
  • 方法二:使用增强for循环,会产生异常:增强for循环在循环的过程中,使用iterator,但是由于没有在iterator中使用remove,而是使用list.remove方法,这种是不会被iterator识别到的。所以有如下要求:增强型的for循环过程中,不能删除数据。
  • 方法三:使用iterator。iterator.hashNext, iterator.next, iterator.remove,因为iterator在remove的时候,已经定位到了要删除的链表元素位置,所以删除操作的复杂度为O(1),整个实现的时间复杂度为O(N)。

ListIterator

ListIterator在Iterator(hasNext,next,remove)的基础上增加了hasPrevious,previous,add,set方法。

时间: 2024-10-04 00:24:40

数据结构和算法分析 表、栈和队列的相关文章

数据结构与算法分析:栈与队列

以下是对数据结构中的栈和队列的一些总结: 一.栈 栈(Stack)是一种特殊的线性表,有后进先出(Last In First Out, LIFO)的性质,且只能从线性表的一段进行插入和删除元素等操作. 栈的常用操作有:进栈.出栈.取栈顶.将栈置空.判断栈是否为空.判断栈是否已满等等. 由于栈也属于线性表,因此线性表的存储结构对栈也适用,因此,使用数组或者单向链表均可以实现栈.这两种存储结构的不同,因此实现栈的方式也有不同,形成的栈的性质也有所不同.一个常见的区别是,在顺序栈中有"上溢"

数据结构与算法分析java——栈和队列1

1. 栈 1.1 分类 顺序栈:顺序线性表实现 链式栈:单向链表存储堆栈 1.2栈的应用 1)数制转换 import java.util.Scanner; import java.util.Stack; public class Tran{ public static void main(String arg[]){ Scanner y=new Scanner(System.in); System.out.println("请输入十进制数"); int b=y.nextInt(); T

Java数据结构和算法之栈与队列

二.栈与队列 1.栈的定义 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表. (1)通常称插入.删除的这一端为栈顶(Top),另一端称为栈底(Bottom). (2)当表中没有元素时称为空栈. (3)栈为后进先出(Last In First Out)的线性表,简称为LIFO表. 栈的修改是按后进先出的原则进行. 每次删除(退栈)的总是当前栈中"最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除. 图1 [示例]元素是以a1,a2,-,a

数据结构实验三《栈和队列》

<数据结构>实验三 栈和队列 一.实验目的 巩固栈和队列数据结构,学会运用栈和队列. 1.回顾栈和队列的逻辑结构和受限操作特点,栈和队列的物理存储结构和常见操作. 2.学习运用栈和队列的知识来解决实际问题. 3.进一步巩固程序调试方法. 4.进一步巩固模板程序设计. 二.实验时间 准备时间为第5周到第6周,具体集中实验时间为6周第2次课.2个学时. 三.实验内容 1.自己选择顺序或链式存储结构,定义一个空栈类,并定义入栈.出栈.取栈元素基本操作.然后在主程序中对给定的N个数据进行验证,输出各个

数据结构和算法分析(9)表栈和队列的实际应用(一)

    在接下来的几篇博文中,将介绍表.栈.队列在编程实践中的应用.     (1)表达式求值:     输入一个中缀表达式,操作符包括(+ - * / ^).转化为后缀表达式之后并计算表达式的值: 要求: 1.输入的中缀表达式必须是一个完整的字符串: 2.不限制数字的位数和正负,负数用()括起来: 代码如下: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 #define EmptyT

数据结构和算法分析(10)表栈和队列的实际应用(二)

    本节继续介绍表.栈.队列在编程实践中的应用.     (1)行编辑程序:(允许用户输入出差错,并在发现错误时可以及时更正.)     功能:接受用户从终端输入的字符型的数据,并存入用户的数据区.由于不能保证不出差错,因此“每接受一个字符即存入用户数据区”的做法不是最恰当的:较好的做法是,设立一个输入的缓冲区,用以接受用户输入的一行字符,然后逐行存入用户数据区. 算法原理:当用户发现刚刚键入的一个字符是错的时,可补进一个退格符“#”,以表示前一个字符无效:如果发现当前键入的行内差错较多或者

用JS描述的数据结构及算法表示——栈和队列(基础版)

前言:找了上课时数据结构的教程来看,但是用的语言是c++,所以具体实现在网上搜大神的博客来看,我看到的大神们的博客都写得特别好,不止讲了最基本的思想和算法实现,更多的是侧重于实例运用,一边看一边在心里隐隐歌颂大神的厉害,然后别人的厉害不是我的,所以到底看得各种受打击+头昏脑涨,写这个系列是希望自己能够总结学到东一块.西一下的知识,因为水平有限+经验不足,所以在此只说最基础的思想,附上我自己的算法实现(肯定还有更优解),如果要想看进阶版的,可以在园里搜“数据结构”,各种语言实现和进阶提升的文章有很

数据结构(二)栈、队列和数组

栈 栈的定义 栈是限制在表的一端进行插入和删除的线性表.允许插入.删除的这一端称为栈顶,另 一个固定端称为栈底.当表中没有元素时称为空栈. 栈的存储实现和运算实现 栈是运算受限的线性表,线性表的存储结构对栈也是适用的,只是操作不同而已. 利用顺序存储方式实现的栈称为顺序栈. 与线性表类似,栈的动态分配顺序存储结构如 下: #define STACK_INIT_SIZE 100 //存储空间的初始分配量 #define STACKINCREMENT 10 //存储空间的分配增量 typedef s

C语言数据结构——第三章 栈和队列

三.栈和队列 栈和队列是两种重要的线性结构.从数据结构的角度来看,栈和队列也是线性表,它的特殊性在于栈和队列的基本操作是线性表操作的子集,它们的操作相对于线性表来说是受到限制的,因此,可以称其为限定性的数据结构. 从数据类型的角度看,它们是和线性表大不相同的两种重要的抽象数据类型,在面向对象的程序设计中,它们是多型数据类型. 3.1-栈 3.1.1-抽象数据类型栈的定义 栈:是限定仅在表尾进行插入或删除操作的线性表,又可以称为后进先出的线性表. 栈顶:栈的表尾端 栈底:栈的表头端 空栈:不含元素

《数据结构》C++代码 栈与队列

线性表中,先进先出的叫队列,先进后出的叫栈.队列常用于BFS,而在函数递归层数过高时,需要手动实现递归过程,这时候便需要写一个“手动栈”. 有时候,我们会有大量数据频繁出入队列,但同时存在其内的元素却不多,此时需要写“循环队列”.其代码并不难,但里面下标递增的语句值得斟酌一下. k=(k+1)%maxn; 这句话用到了取模运算%,是非常浪费时间的.若能避免使用%,则可以大大提高代码运行速度.我做了一个测试,把下面五种语句写法分别运行5×10^8次,在我的机器上用codeblocks10.05各运