一、题目描述
写一个顺序表类
Seqlist
,属性两个(int data[100] , int len),构造方法(),creatlist()
(产生10个元素,分别是1,4,9,16,…,100 ),outputlist()
(输出顺序表),locate()
(查找值为x的位置,返回其下标),insert()
(在第i个位置插入值x),delete()
(删除第i个位置的元素),然后测试以上函数。
二、输出样式
三、代码展示
1、创建元素列表
- 定义
creatlist()
public void CreateList(int len){
int[] list = new int[len];
for (int i=1; i<=len;i++){
list[i-1] = ((int) Math.pow(i, 2));
if (Arrays.toString(list).length() == len){
break;
}
}
this.data = list;
}
2、输出顺序表
- 定义
outputlist(()
public void outputlist(){
for (int i=0; i<(this.data.length); i++){ // 遍历输出
System.out.print(data[i] + " ");
}
System.out.println();
}
3、查找输入数的下标
- 定义
locate(()
public int locate(int x) {
int index = -1;
for (int i=0; i<(this.data.length); i++) {
if (x == data[i]) {
index = i;
}
}
// System.out.println(index);
return index;
}
4、指定位置插入值
- 定义
insert(()
public boolean insert(int i, int x){
boolean flug = true;
if (this.len == this.data.length){
this.data = Arrays.copyOf(this.data,this.data.length+1);
}
// 判断是否合法
if (i < 0 || i>this.data.length-1){
flug = false;
}
// 从x开始,之后的数向后移动一位
for (int j = this.len-1; j>=i; j--){
this.data[j+1] = this.data[j];
}
data[i] = x;
// this.len++;
return flug;
}
5、删除指定的值
- 定义
delete(()
public boolean delete(int x){
int index = locate(x);
for (int i = index; i<this.len - 1; i++){
this.data[i] = this.data[i+1];
}
if (this.len == this.data.length){
this.data = Arrays.copyOf(this.data,this.data.length-1);
}
return true;
}
6、完整代码显示
package net.sjjg;
import java.util.Arrays;
import java.util.Scanner;
public class Seqlist {
public static void main(String[] args) {
Seqlist seqlist = new Seqlist();
// 定义初始长度
seqlist.len = 10;
// 创建初始化顺序表
seqlist.CreateList(seqlist.len);
// 输出初始化顺序表
System.out.println("顺序表初始化后输出:");
seqlist.outputlist();
Scanner sc = new Scanner(System.in);
System.out.print("请输入要查找的数:");
int x = sc.nextInt();
// 返回x下标
int i = seqlist.locate(x);
// 插入x1
if (i == -1){
System.out.println("下标返回错误!顺序表中没有【"+x+"】");
} else {
System.out.println(x + "在顺序表中的的下标为:[" + i + "]");
System.out.print("请输入要插入的数:");
int x1 = sc.nextInt();
if (seqlist.insert(i,x1)){
System.out.println("插入元素后输出:");
seqlist.outputlist();
} else {
System.out.println("输入下标不合法");
}
// 执行删除语句
System.out.print("输入要删除的数:");
int del_num = sc.nextInt();
if (seqlist.locate(del_num) == -1){
System.out.println("下标返回错误!顺序表中没有【"+del_num+"】");
} else {
if (seqlist.delete(del_num)){
System.out.println("删除元素后输出:");
seqlist.outputlist();
}
}
}
}
int[] data;
int len;
public Seqlist(){
this.data = new int[10];
}
// 产生10个元素,分别是1,4,9,16,...,100
public void CreateList(int len){
int[] list = new int[len];
for (int i=1; i<=len;i++){
list[i-1] = ((int) Math.pow(i, 2));
if (Arrays.toString(list).length() == len){
break;
}
}
this.data = list;
}
// 输出顺序表
public void outputlist(){
for (int i=0; i<(this.data.length); i++){ // 遍历输出
System.out.print(data[i] + " ");
}
System.out.println();
}
// 查找值为x的位置,返回其下标
public int locate(int x) {
int index = -1;
for (int i=0; i<(this.data.length); i++) {
if (x == data[i]) {
index = i;
}
}
// System.out.println(index);
return index;
}
// 在第i个位置插入值x
public boolean insert(int i, int x){
boolean flug = true;
if (this.len == this.data.length){
this.data = Arrays.copyOf(this.data,this.data.length+1);
}
// 判断是否合法
if (i < 0 || i>this.data.length-1){
flug = false;
}
// 从x开始,之后的数向后移动一位
for (int j = this.len-1; j>=i; j--){
this.data[j+1] = this.data[j];
}
data[i] = x;
// this.len++;
return flug;
}
// 删除指定的数
public boolean delete(int x){
int index = locate(x);
for (int i = index; i<this.len - 1; i++){
this.data[i] = this.data[i+1];
}
if (this.len == this.data.length){
this.data = Arrays.copyOf(this.data,this.data.length-1);
}
return true;
}
}