一,线性表
线性表是最基本,最简单,也是最常用的数据结构。一个线性表是n个具有相同特性的数据元素的数列。
它包含了顺序表,链表,栈,队列,接下来将会一一介绍。
1.1顺序表
顺序表是在计算机内存中以数组形式保存的线性表,通俗点说,即通过数据元素物理上的相邻关系来表示逻辑上的相邻关系。
相关功能的代码如下:
添加元素
//向线性表中添加元素
public void insert(T t){
if (N==list.length){
resize(2*list.length); //将新数组的长度设置为原来的2倍
}
list[N++]=t;
}
向指定位置添加元素
//向指定位置插入元素
public void insert(int i,T t){
//将i后面的元素向后移动一位
for (int index=N;index>i;index--) {
list[index] = list[index - 1];
}
//将元素插入
list[i]=t;
//元素个数加1
N++;
}
删除指定位置的元素,并返回其值
//删除指定位置的元素,并返回值
public T remove(int i){
//记录索引i处的值
T current=list[i];
//将i后的值向前移动一位
for (int index=i;index<N-1;index++){
list[index]=list[index+1];
}
N--;
if (N<list.length/4){
resize(list.length/2);//将新数组的长度设为原来的二分之一
}
return current;
}
查找元素t第一次出现的位置
//查找元素t第一次出现的位置
public int search(T t){
for (int i=0;i<N-1;i++){
if (list[i].equals(t))
return i;
}
return -1;
}
在内部遍历元素
//遍历顺序表
@Override
public Iterator<T> iterator() {
return new siterator();
}
public class siterator implements Iterator{
private int cusor;
public siterator(){
this.cusor=0;
}
@Override
public boolean hasNext() {
return cusor<N;
}
@Override
public Object next() {
return list[cusor++];
}
}
顺序表完整代码
public class SequenceList <T> implements Iterable<T>{
private T[] list;
private int N;
public SequenceList(int capacity){
this.list=(T[])new Object[capacity];
this.N=0;
}
//将一个线性表设置为空表
public void clear(){
this.N=0;
}
public boolean isEmpty(){
return N==0;
}
//获取线性表的长度
public int length(){
return N;
}
//获取指定位置的元素
public T get(int i){
return list[i];
}
//向指定位置插入元素
public void insert(int i,T t){
//将i后面的元素向后移动一位
for (int index=N;index>i;index--) {
list[index] = list[index - 1];
}
//将元素插入
list[i]=t;
//元素个数加1
N++;
}
//根据newsize的大小,重置list的大小
public void resize(int newsize){
//定义一个临时数组,指向原数组
T[] arr=list;
//创建新数组
list=(T[])new Object[newsize];
//把原数组中的数据复制到新数组中
for(int i=0;i<N;i++){
list[i]=arr[i];
}
}
//向线性表中添加元素
public void insert(T t){
if (N==list.length){
resize(2*list.length); //将新数组的长度设置为原来的2倍
}
list[N++]=t;
}
//删除指定位置的元素,并返回值
public T remove(int i){
//记录索引i处的值
T current=list[i];
//将i后的值向前移动一位
for (int index=i;index<N-1;index++){
list[index]=list[index+1];
}
N--;
if (N<list.length/4){
resize(list.length/2);//将新数组的长度设为原来的二分之一
}
return current;
}
//查找元素t第一次出现的位置
public int search(T t){
for (int i=0;i<N-1;i++){
if (list[i].equals(t))
return i;
}
return -1;
}
//遍历顺序表
@Override
public Iterator<T> iterator() {
return new siterator();
}
public class siterator implements Iterator{
private int cusor;
public siterator(){
this.cusor=0;
}
@Override
public boolean hasNext() {
return cusor<N;
}
@Override
public Object next() {
return list[cusor++];
}
}
}
b站详细讲解网址:http://yun.itheima.com/course/639.html