写在前面:数据结构与算法篇
开始,分享技术,共同进步,有不足请见谅,相关意见可评论告知 ~
一个犹豫不决的灵魂,
奋起抗击无穷的忧患,
而内心却又矛盾重重,
真实生活便就是如此。
.
算法设计编程之重心,
数据结构编程之灵魂!
基于《数据结构》(c 语言版) 严蔚敏 描述,主要使用Java实现
常用基本操作
参考课本 p19
DestoryList
package DataStructures.BaseDo;
public class DestoryList {
// 主函数测试
public static void main(String[] args) {
int [] arr ={2,4,7,6} ;
int [] result= delete(arr) ;
System.out.println(result); // 数组的地址
for (int i = 0; i <result.length ; i++) {
System.out.println(result[i]);
}
}
public static int[] delete(int [] arr){
for (int i = 0; i <arr.length ; i++) {
arr[i] = 0 ;
}
return arr ;
}
}
解释:销毁线性表,使其内元素为0
ListEmpty
package DataStructures.BaseDo;
public class ListEmpty {
public static void main(String[] args) {
int [] a = {0,0} ;
int [] b ={3,5,7} ;
int [] c ={} ; // 判断数组为空的方法 长度为空
System.out.println(fun(a));
System.out.println(fun(b));
// System.out.println(c.length);
System.out.println(fun(c));
}
// 判断是否为空表函数
public static Boolean fun(int [] arr){
boolean flag = false ;
for (int i = 0; i <arr.length ; i++) {
if(arr[i] == 0){
flag = true;
}
}
if(arr.length == 0){
flag = true;
}
return flag ;
}
}
解释 : 判断线性表是否为空,根据情况返回true/false
GetElem
package DataStructures.BaseDo;
public class GetElem {
public static void main(String[] args) {
int [] a= {1,3,4,6,8,9} ;
// 主函数测试·
System.out.println(Elem(a,3));
}
public static int Elem(int [] arr,int n){
return arr[n] ;
}
}
解释: 返回线性表第i个值
LocateElem
package DataStructures.BaseDo;
public class LocateElem {
public static void main(String[] args) {
int [] a = {2,3,4,5} ;
System.out.println( compare(a,5) );
}
public static int compare(int [] a, int i){
for (int j = 0; j <a.length ; j++) {
if(a[j]==i){
return j ;
}
}
return 0 ;
}
}
解释: 返回线性表第一个与输入值相等的位序
ListInsert
package DataStructures.BaseDo;
// 实现在表中插入数据
public class ListInsert {
// 插入函数
public static long[] insert(long[] arr, int i, long l) {
//新建数组,对原数组扩容
long[] arr1 = new long[arr.length + 1];
//将原数组数据赋值给新数组
for (int j = 0; j < arr.length; j++) {
arr1[j] = arr[j];
}
//将大于i的数据向后移动一位 j 为原数组中最后一个
for (int j = arr1.length - 2; j > i; j--) {
arr1[j + 1] = arr1[j];
}
//赋值到i位置
arr1[i + 1] = l;
return arr1;
}
//测试
public static void main(String[] args) {
long[] arr = {12, 25, 11, 36, 14};
long[] arr1 = insert(arr, 3, 100);
for (long l : arr1) {
System.out.print(l + " ");
}
}
}
解释: 在线性表第i位置插入元素
ListDelete
package DataStructures.BaseDo;
public class ListDelete {
public static long[] delete (long[] arr, int i){
long [] arr1 = new long[arr.length-1] ;
for (int j = 0; j <arr1.length ; j++) {
// 判断数组是否越界
if(i<0 || i>arr1.length){
throw new RuntimeException("数组越界......") ;
}
if(j<i){
arr1[j] = arr[j] ;
}else {
arr1[j]=arr[j+1] ;
}
}
System.out.println("已删除"+arr[i]);
return arr1 ;
}
public static void main(String[] args) {
long[] arr = {12, 25, 11, 36, 14};
long[] arr1 = delete(arr, 0);
for (long l : arr1) {
System.out.print(l + " ");
}
}
}
解释: 删除线性表第i位置的元素
附加
课本之外
Replace
package DataStructures.BaseDo;
// 取代数组中元素算法
public class Replace {
public static void main(String[] args) {
int [] a = {1,2,3,4} ;
int [] b= fun(a,2,0) ;
for (int i : b) {
System.out.print(i+ " ");
}
}
public static int[] fun(int[] arr,int i,int num){ // 分函数写在主函数外
int [] arr1 = new int[arr.length] ;
for (int j = 0; j <arr.length ; j++) {
arr1[j] = arr[j] ;
arr1[i] = num ;
}
return arr1;
}
}
解释: 取代数组元素第i位置的元素