概念
什么是数据结构
数据结构就是数据之间的关系,提高程序效率
① 逻辑关系:人为认为数据之间的关系
1) 集合:在一个范围内有多个数据,数据之间没有关系
2) 线性:一对一关系
3) 树型:一对多关系
4) 图:多对多关系② 物理关系:内存存储
1) 顺序存储:数组
2) 链式存储:链表
简单的算法实现
大数字运算(输出时不显示前面多余的零)
大数字运算中,某些数据类型无法接收这么大的数字,或者能接收但会丢失精度。这时候我们可以用数组的方式来实现大数字运算
- 流程图
- 实现代码
public class BigNum {
public static void main(String[] args) {
/*注释部分代码为大数字相乘的举例
int[] ints = new int[6];
ints[ints.length-1] = 5;
ints[ints.length-2] = 7;
ints[ints.length-3] = 3;
int num = 375;
ints = mult(ints,num);
print(ints);
*/
//下面的举例是50的阶乘
int n =50;
int[] ints = new int[100]; //声明100长度的ints数组用来接收运算结果
ints[ints.length-1] = 1;
for(int i=1;i<=n;i++){
ints = mult(ints,i);
}
print(ints);
}
//将数组的每一位和乘数相乘,得到的结果存在数组里,然后进行进位运算得到最终的结果数组
public static int[] mult(int[] ints,int num){
for(int i = 0; i<ints.length;i++){
ints[i] *= num;
}
//进位运算
for(int i=ints.length-1; i>0; i--){
ints[i-1] = ints[i-1]+ints[i]/10;
ints[i] = ints[i]%10;
}
return ints;
}
//循环遍历输出,从数组中左往右第一个不为0的数开始输出结果
public static void print(int ints[]){
int flag= 0;
for(int i = 0; i<ints.length-1;i++){
if(ints[i]!=0){
flag= i;
break;
}
}
for(int i = flag; i<ints.length;i++){
System.out.print(ints[i]);
}
}
}
运行结果(50的阶乘):
插入排序(只用两个循环实现)
- 流程图
- 代码实现
public class InsertArray {
public static void main(String[] args) {
int[] ints = {21,56,23,48,65,15,2,46,36};
ints = insertSort(ints);
for(int i=0;i<ints.length;i++){
System.out.print(ints[i]+" ");
}
}
public static int[] insertSort(int[] ints){
for(int i=1;i<ints.length;i++){ //从数组下标为1开始循环
//当i位置的值小于i-1位置的值时进入j循环
if(ints[i]<ints[i-1]){
for(int j = i ;j>0;j--){
//倒序遍历 当j位置的值小于j-1位置的值时,交换ints[j]和ints[j-1]的值
if(ints[j]<ints[j-1]){
int temp = ints[j];
ints[j] = ints[j-1];
ints[j-1] =temp;
}
}
}
}
return ints;
}
}
二分查找法
- 流程图
- 代码实现
public class BinarySearch {
public static void main(String[] args) {
int[] ints = {2,15,21,23,36,46,48,56,65};
int num = 21;
find(ints,num);
}
private static void find(int[] ints, int num) {
int s = 0; //开始位置
int e = ints.length-1; //结束位置
while(s<=e){
int m = (s+e)/2; //中间位置
if(ints[m] == num){
System.out.println("位于第"+(m+1)+"个元素");
return;
}else if(ints[m] > num){
e = m-1;
}else{
s = m+1;
}
}
System.out.println("找不到该元素!");
}
}