数据结构:结构决定功能,结构不同,功能不同。
算法:程序灵魂之所在(没有最好,只有最优)。
数组
概述:数据结构中最简单的存储方式。
数组中添加数据
public static void main(String[] args) {
//原来的数组
int[] arr=new int[] {
23,43,12,56,76,89,43};
//查看数组中的数据
System.out.println(Arrays.toString(arr));
//需要增加的元素
int add=80;
//定义新的数组
int[] newArr=new int[arr.length+1];
//数组的赋值
for(int i=0;i<newArr.length-1;i++) {
//将原来数组中的数字据给新的数组
newArr[i]=arr[i];
}
//需要增加的数字加进去
newArr[newArr.length-1]=add;
//将新的数组给新的数组
arr=newArr;
System.out.println(Arrays.toString(arr));
}
数组中删除数据
public static void main(String[] args) {
//原来的数组
int[] arr=new int[] {
15,63,45,23,78,15};
//查看数组
System.out.println(Arrays.toString(arr));
//需要删除的数字的下标
int index=0;
//定义新的数组
int[] newArr=new int[arr.length-1];
//数组的赋值
for(int i=0;i<newArr.length;i++) {
//删除的数字之前
if(i<index) {
newArr[i]=arr[i];
//删除数字之后的数字
}else {
newArr[i]=arr[i+1];
}
}
//将新的数组给原来的数组
arr=newArr;
System.out.println(Arrays.toString(arr));
}
数组中修改指定的数据
public static void main(String[] args) {
//原有的数组
int[] arr=new int[] {
23,12,41,57,76,78,39};
//需要修改数组中数据的下标
int index=3;
//将数据修改为
int to=100;
//查看未修改前的数组
System.out.println("修改前:"+Arrays.toString(arr));
//修改
arr[index]=to;
//查看修改后的数组中的数据
System.out.println("修改后:"+Arrays.toString(arr));
}
在数组中指定位置插入数据
/**
* 在数组中指定位置的插入数据
* @param arr 原来的数组
* @param index 插入位置的下标
* @param data 插入的数据
* @return 删除后的数组
*/
private static int[] insertConfirm(int[] arr,int index, int data) {
//定义新的数组
int[] newArr=new int[arr.length+1];
//遍历数组
for(int i=0;i<arr.length;i++) {
//判断当前遍历的下标与目标位置的大小
if(i<index) {
//将目标位置之前的数据放入到新数组中
newArr[i]=arr[i];
}else {
//将目标位置后的数据放到新的数组中去
newArr[i+1]=arr[i];
}
}
//将需要插入的数据放进新的数组
newArr[index]=data;
return newArr;
}
删除数组中指定位置的数据
/**
* 删除数组中指定位置的数据
* @param arr 原来的数组
* @param index 删除数据的下标
* @return 删除后的数组
*/
private static int[] deleteConfirm(int[] arr, int index) {
// 定义新的数组
int[] newArr=new int[arr.length-1];
//遍历数组
for(int i=0;i<newArr.length;i++) {
//比较操作的位置与当前遍历位置的大小
if(i<index) {
//将此位置之前的数据给新数组
newArr[i]=arr[i];
}else {
//将之后的数字给新数组
newArr[i]=arr[i+1];
}
}
return newArr;
}
数据查找之线性查找
/**
* 线性查找
* @param arr 查找的数组
* @param findData 需要查找的数组
* @return 查找数字所在的位置
*/
private static int lineSearch(int[] arr,int findData) {
// 查找数字的下标(没有则返回-1)
int index=-1;
//遍历数组
for(int i=0;i<arr.length;i++) {
//判断是否要找的数字
if(arr[i]==findData) {
//将下标给index
index=i;
//跳出循环
break;
}
}
return index;
}
数据查找之二分查找
二分查找法适用条件:数据序列有序
/**
* 二分查找法
* @param arr 查找的数组
* @param target 查找的目标数
* @return 目标数所在的位置
*/
private static int binarySearch(int[] arr, int target) {
// 查找数据的下标(不存在返回-1)
int index=-1;
//开始的位置
int start=0;
//结束的位置
int end=arr.length-1;
//中间的位置
int mid=(start+end)/2;
//循环遍历
while(true) {
//如果中间位置的数字刚好等于目标数
if(arr[mid]==target) {
index=mid;
break;
}else {
//如果中间数字小于目标数字
if(arr[mid]<target) {
//向后移动开始的下标
start=end+1;
//将
}else {
//向前移动结束的下标
end=end-1;
}
}
//改变中间的位置
mid=(start+end)/2;
}
return index;
}
栈(数组模拟栈)
特点:先进后出(摞盘子)
MyStack.java
package test2;
/**
* 用数组模拟栈
* @author Mr.Zhao
* @version jdk 1.8 tomcat 8.5
* @2020年5月5日
* @下午4:29:23
*/
public class MyStack {
int[] arr;
public MyStack() {
arr=new int[0];
}
//压栈
public int[] push(int a) {
int[] newArr=new int[arr.length+