表、栈和队列

本文深入探讨了Java中两种主要的数据结构——ArrayList与LinkedList的特点及应用场景,对比了它们之间的优缺点,并详细介绍了栈与队列这两种特殊的线性表的实现方式及其在实际编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、表

java中最常见的两个实现方式是:ArrayList和LinkedList。

1)ArrayList类提供了List ADT的一种可增长数组的实现。

优点是get和set的调用话费常熟时间。

缺点是新项的插入和现有项的删除代价昂贵。

2)LinkedList类则提供了List ADT的双链表实现。

优缺点和ArrayList相反。

其对get的调用是用next函数逐个查询的,代价很昂贵。


二、栈

栈是限制插入和删除只能在在一个位置上进行的表,该位置是表的末端,叫做栈的顶(top)。对栈的基本操作有push(进栈)和pop(出栈)。top操作是对栈顶的元素进行考察。对空栈进行pop或者top的时候,会出现ADT错误。

实现:ArrayList和LinkedList都支持栈操作,二者性能几乎无区别,都是快速的O(1)时间。

特点:如果需要调用最近的元素,就要应用栈。

应用:平衡符号,后缀表达式,方法调用。

方法调用:比如从一个方法跳转到另一个方法的时候,就要把原方法的参数,入口地址存入栈中。对于某方法使用了大量递归,可能导致栈溢出。


三、队列

像栈一样,队列也是表,然而使用队列时插入是在一端进行而删除是在另一端进行。基本操作有enqueue(入队,队尾插入),和dequeue(出队,对头删除)。

实现:ArrayList和LinkedList都支持队列操作,二者性能几乎无区别,都是快速的O(1)时间。具体操作是:让元素x入队时,我们让currentSize和back增1,置theArray[back]=x;若是元素出队,我们置返回值为theArray[front],并将currentSize和front减1.这有一个潜在的问题,比如说,十个位置的队列,队列已经使用的队尾,但是队列的前面的元素已经出队,实际上只有最后两位还有元素。简单的解决方法是使用循环数组实现,将back和front序号回绕。

特点:需要排队的地方,队列比较合适。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值