集合:
封装各种各样的数据结构
数组 链表 栈 队列 二叉树
数据结构:
一.什么是数据结构
1.1968年,美国的Donald Ervin Knuth教授开设了一门基本算法的课程,开设了数据结构的先河.
数据结构:研究数据与数据之间的关系,而非计算方法.
程序 = 数据结构 + 算法 -> 沃思,获得图灵奖
2.数据结构的基本概念
数据: 所有能够输入到计算机中去描述事物的符号
数据元素: 数据的基本单位又叫节点,结点,顶点,记录
数据项: 有独立含义的数据最小单位,也叫域.
数据结构: 数据元素和数据关系的集合
算法:数据结构所具备的功能,解决特定问题的方法
二.逻辑结构 和 存储(物理)结构
逻辑结构:
集合: 数据元素同属于一个集体,但是元素之间没有任何关系
线性结构: 数据元素之间存在一对一的关系(表)
树型结构: 数据元素之间存在一对多的关系(倒悬树)
图型结构: 数据元素之间存在多对多的关系(地图)
物理(内存)结构:
顺序结构(数组)
数组存储在连续的内存空间中,用数据元素的相对位置来表示关系.
链式结构(链表)
数据元素存储在彼此独立的内存空间中,每个独立的元素也叫做节点,每个数据元素中增加一个数据项用来存储其他元素的地址,用来表示元素之间的关系.
逻辑结构和物理结构之间的关系:
表 -> 顺序 链式
树 -> 顺序 链式
图 -> 顺序 + 链式
三.数据结构的运算
创建
增
删
改
查
插入
遍历
排序
顺序结构:
底层实现:数组
package data;
import java.util.Arrays;
/*
底层实现:数组
*/
public class Demo01 {
private static Object[] arr = new Object[5];
private static int size=0;
private static int index=0;
//1.向集合(this)中末尾添加元素
public void add(Object obj){
if(size==arr.length){
arr = Arrays.copyOf(arr,arr.length+1);
}
arr[size]=obj;
size++;
}
// 2.向集合index的位置中插入obj元素
public void add(Object obj,int index){
if(index>size-1&&index<0){
return ;
}
if(size==arr.length){
arr = Arrays.copyOf(arr,arr.length+1);
}
for (int i = arr.length-1; i > index; i--) {
arr[i]=arr[i-1];
}
arr[index]=obj;
}
//3.删除指定位置(index)上的元素,并且返回删除的元素
public void delete(int index){
for (int i = index; i < size ; i++) {
arr[i]=arr[i+1];
}
//size--;
}
//4.删除第一个指定元素(obj)
public void delete1(Object obj){
for (int i = 0; i < size; i++) {
if(arr[i].equals(obj)){
// for (int j = i; j <size ; j++) {
// arr[j]=arr[j+1];
// }
delete(i);
size--;
break;
}
}
}
//5.替换指定位置上的元素,替换成obj,并且返回被替换的元素
public void replace(Object obj,int index){
for (int i = 0; i < size; i++) {
if(i==index){
arr[i]=obj;
}
}
}
// 6.从集合中获得指定位置(index)的元素
public void get(int index){
for (int i = 0; i < size; i++) {
if(i==index){
System.out.println(arr[i]);
}
}
}
//7.获得集合中的元素个数
public int getLength(){
return size;
}
//8.判断集合中是否存在指定元素obj
public boolean contains(Object obj){
for (int i = 0; i < size; i++) {
if(arr[i]==obj){
return true;
}
}
return false;
}
//9.判断集合是否为空:没有有效元素是空
public boolean isEmpty(){
if(size==0){
return true;
}
return false;
}
// 10.打印出在集合中的有效元素
public String toString(){
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("[");
for (int i = 0; i < size; i++) {
stringBuilder.append(arr[i]);
if(i<size-1){
stringBuilder.append(",");
}
}
stringBuilder.append("]");
String s = stringBuilder.toString();
return s;
}
}