第二章 表、栈和队列
-
表ADT
-
表的简单数组实现
-
表的扩展
-
int []arr= new int [10]; int [] newArr=new int [arr.length*2]; for(int i=0;i<arr.length;i++) newArr[i]=arr[i]; arr=newArr;
-
简单链表
-
Java Collection API中的表
-
Collection接口:集合的概念在Collection接口中得到抽象,它存储一组类型相同的对象
-
Iterator接口:通过Iterator方法,每个集合均可创建并返回给客户一个实现Iterator接口的对象,并将当前位置概念在对象内部存储起来
-
实现Iterator接口的集合必须提供一个称为iterator的方法,该方法返回一个Iterator类型的对象
-
如果对正迭代的集合进行结构上的改变,如删除插入等,那么迭代器不再合法
-
List接口:继承了Collection接口;
-
ArrayList类:可增长数组
-
初次使用数组开辟容量空间为10
-
如果添加操作达到容量,那么将进行1.5倍扩容,创建新数组,将旧的拷贝进去。因为泛型数组创建是非法的,可以创建一个泛型类型界限的数组,然后是用一个数组进行类型转换
-
AnyType []theItems; AnyType []old=theItems; theItems =(AnyType []) new Object [newlength];
-
-
int newCapacity = oldCapacity + (oldCapacity >> 1);
-
在删除操作中,对提供的索引,将索引后部分对前一个进行覆盖
-
System.arraycopy(elementData, index+1, elementData, index,numMoved);
-
迭代器是一个内部类并存储当前位置和一个链接到MyArrayList的隐式链
-
-
LinkedList类:双链表实现,
-
该链表可以直接在表头表尾直接插入
-
可作为堆栈队列使用
-
栈ADT
-
Stack
-
栈的是实现可以是链式结构和数组结构
-
需要一个时刻指向栈顶的指针
-
先入后出的特点,使得无论入栈还是出栈都是对栈顶操作
-
应用:
-
平衡符号,判断字符串中的括号的否合法存在
-
后缀表达式:当一个后缀表达式给出时,不需要知道它的计算规则
-
遇见数字就入栈,遇到符号就弹出两个数字进行计算在入栈
-
中缀到后缀的转换
-
定义一个栈来存储符号,包括括号
-
对原中缀表达式进行遍历,遇见数字就输出
-
如果遇见左括号,那么左括号进栈,直到遇见一个右括号才弹出
-
如果遇见其他加减乘除符号时候,要比较优先级,
-
如果栈为空就入栈,
-
如果不为空就比较栈顶符号和当前符号的优先级
-
如果当前比栈顶高,入栈
-
否则出栈,直达发现比当前低的。或者是左括号。然后在把本符号进栈
-
递归是栈的一种实现
-
为了防止栈空间用尽导致递归失控,避免使用尾递归
-
尾递归涉及在最后一行的递归调用,而在之前的内存得不到释放,存储在内部栈里,更容易导致栈溢出
-
队列ADT
-
Queue
-
先进先出的结构使得队列需要指向队头和队尾的两个指针
浪波激泥

浙公网安备 33010602011771号