表、栈和队列

来源:互联网 发布:望远镜淘宝网 编辑:程序博客网 时间:2024/05/22 03:11

表、栈和队列是最简单和最基本的三种数据结构,它们是ADT(抽象数据类型)的最基本的例子。下面分别说明。

一.ADT
数据集合D={a1,a2,……an}
关系集合R={<a1,a2>,<a2,a3>,<a3,a4>……<a(n-1),a(n)>}
基本操作:基本的增删改查(按需决定)

二.简单实现
1.数组顺序实现
采用定长的一维数组存储结构
优点:存取元素方便,时间代价为O(1)
缺点:插入删除的最坏情况以及平均情况时间代价均为O(n)(只有在最佳情况时才为O(1))
2.简单链表
通过指针把它的一串存储结点连成一个链
存储结点由两部分组成:
①data字段
②link字段
优点:避免了插入和删除的线性开销
缺点:l无法随机读取元素
ink字段仅仅指向后继结点,不能有效地找到前驱——双链表可以弥补这个问题

JavaAPI中的表

一.接口
1.java.util.Colleciton接口
2.java.util.Iterator接口
一般只有在需要立即使用一个迭代器时,我们才应该获取迭代器。
3.List接口

实现

1.ArrayList
提供了一种可增长数组的实现,它的add()和remove()方法均为O(n)操作
优点缺点:同数组实现
2.LinkedList
提供了双链表(保留到该表两端的引用)实现,它的get()方法为O(n)操作

对搜索而言,ArrayList与LinkedList均是低效的


1.定义:栈是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶。
2.实现:
由于栈是一个表,所以任何实现表的方法都能实现栈。
ArrayList与LinkedList都支持栈操作

栈的应用

1.平衡符号
2.后缀表达式
3.中缀到后缀的转换
4.方法调用


队列

1.定义:队列是限制插入在一端(表尾)进行,而删除在另一端(表头)进行的表。
2.实现:
同栈一样,对于队列而言 ,任何的表的实现都是合法的。
比较好的方式:循环数组实现











0 0