数据结构与算法基础(java版)学习路线+示图+代码

本文详细介绍了数据结构的基础知识,包括数组、栈、队列、排序算法、二叉树、散列表和图等。重点讲解了各种操作如添加、删除、查找,以及排序算法的实现和树的遍历。同时,还探讨了哈希表的设计和冲突解决策略。
摘要由CSDN通过智能技术生成

数据结构:结构决定功能,结构不同,功能不同。
算法:程序灵魂之所在(没有最好,只有最优)。

数组

概述:数据结构中最简单的存储方式。
在这里插入图片描述

数组中添加数据

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+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值