小C最近开学数据结构,在此记录下学习历程。
首先:数组的增删改查
package ch01Array;
public class MyArray {
//数组
private long[] arr;
//数组中有效数据的大小
private int elems;
//默认构造函数
public MyArray(){
arr = new long[50];
}
public MyArray(int max){
arr = new long[max];
}
//插入数据
public void insert(long value){
arr[elems] = value;
elems++;
}
//显示数据
public void display(){
for (int i = 0; i < elems; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
//查找数据
public int find(long searchKey){
int i;
for(i = 0; i < elems; i++){
if(arr[i] == searchKey)
break;
}
if(i == elems)
return -1;
else
return i;
}
//删除数据
public void delete(long deleteKey){
if(-1 != find(deleteKey)){
for(int i = find(deleteKey); i < elems; i++){
arr[i] = arr[i + 1];
}
}else
System.out.println("查找不到指定数据,删除失败");
}
//修改数据
public void change(long oldValue, long newValue){
if(-1 != find(oldValue))
arr[find(oldValue)] = newValue;
else
System.out.println("查找不到指定数据,修改失败");
}
}
测试:
package ch01Array;
public class TestMyArray {
public static void main(String[] args) {
MyArray myArray = new MyArray();
myArray.insert(4);
myArray.insert(6);
myArray.insert(35);
myArray.insert(23);
myArray.insert(89);
myArray.display();
System.out.println(myArray.find(23));
myArray.delete(5);
myArray.display();
myArray.change(35, 45);
myArray.display();
}
}
有序插入和二分法查找:
package ch01Array;
public class MyOrderArray {
//数组
private long[] arr;
//数组中有效数据的大小
private int elems;
//默认构造函数
public MyOrderArray(){
arr = new long[50];
}
public MyOrderArray(int max){
arr = new long[max];
}
//有序插入数据
public void insert(long value){
int i;
for(i = 0; i < elems; i++){
if(arr[i] > value)
break;
}
for(int j = elems; j > i; j--){
arr[j] = arr[j - 1];
}
arr[i] = value;
elems++;
}
//二分法查找
public int binaryFind(long searchKey){
int ins = 0;
int low = 0;
int pow = elems;
while(true){
ins = (low + pow) / 2;
if(arr[ins] == searchKey)
return ins;
else if(low > pow)
return -1;
else
if(arr[ins] > searchKey)
pow = ins - 1;
else
low = ins + 1;
}
}
//显示数据
public void display(){
for (int i = 0; i < elems; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
测试:
package ch01Array;
public class TestMyOrderArray {
public static void main(String[] args) {
MyOrderArray myArray = new MyOrderArray();
myArray.insert(56);
myArray.insert(6);
myArray.insert(35);
myArray.insert(23);
myArray.insert(89);
myArray.display();
System.out.println(myArray.binaryFind(35));
}
}
数组对象存储
对象类
package ch01Array;
public class Person {
private String name; //姓名
private int age; //年龄
private String sex; //性别
public Person(String name, int age, String sex) {
super();
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public void display(){
System.out.print("姓名:" + this.name);
System.out.print(",年龄:" + this.age);
System.out.print(",性别:" + this.sex);
System.out.println();
}
}
对象数组
package ch01Array;
public class PersonArray {
//数组
private Person[] arr;
//数组中有效数据的大小
private int elems;
//默认构造函数
public PersonArray(){
arr = new Person[50];
}
public PersonArray(int max){
arr = new Person[max];
}
//插入数据
public void insert(Person person){
arr[elems] = person;
elems++;
}
//显示数据
public void display(){
for (int i = 0; i < elems; i++) {
arr[i].display();
}
System.out.println();
}
//查找数据
public int find(String name){
int i;
for(i = 0; i < elems; i++){
if(arr[i].getName().equals(name))
break;
}
if(i == elems)
return -1;
else
return i;
}
//删除数据
public void delete(String name){
if(-1 != find(name)){
for(int i = find(name); i < elems; i++){
arr[i] = arr[i + 1];
}
}else
System.out.println("查找不到指定数据,删除失败");
elems--;
}
//删除数据
public void delete(Person person){
if(find(person.getName()) == -1)
System.out.println("查找不到指定数据,删除失败");
else
for(int i = find(person.getName()); i < elems; i++){
arr[i] = arr[i + 1];
}
elems--;
}
//修改数据
public void change(Person oldPerson, Person newPerson){
if(-1 != find(oldPerson.getName()))
arr[find(oldPerson.getName())] = newPerson;
else
System.out.println("查找不到指定数据,修改失败");
}
}
测试类:
package ch01Array;
public class TestPersonArray {
public static void main(String[] args) {
PersonArray pa = new PersonArray();
//创建对象
Person p1 = new Person("张三",20,"男");
Person p2 = new Person("李四",21,"男");
Person p3 = new Person("王五",22,"女");
Person p4 = new Person("赵六",23,"男");
Person p5 = new Person("李斯",24,"男");
//插入操作
pa.insert(p1);
pa.insert(p2);
pa.insert(p3);
pa.insert(p4);
pa.insert(p5);
pa.display();
//删除操作
pa.delete("李斯");
pa.display();
//删除操作
pa.delete(p2);
pa.display();
}
}