java数据结构(一)

顺序表

一、准备数据

class DATA{
/**
 * 准备数据
 */
String keyNode;
String name;
int age;

}

二、初始化顺序表

    /**初始化顺序表*/
void  slInit(SLType slType){
    slType.listLen = 0;
}

三、计算顺序表长度

  int slLength(SLType slType){
    return (slType.listLen);
}

四、插入节点

 int slInsert(SLType slType , int n , DATA data){
    int i;

    if(slType.listLen >= MAXLEN){

        System.out.println("顺序表已满,无法插入节点!");
        //返回0 代表插入失败
        return 0;
    }

    if(n < 1 || n > slType.listLen - 1){
        System.out.println("插入节点序号有误,插入失败!");
        return 0;
    }

    for(i = slType.listLen;i >= n;i--){

       slType.dataList[i + 1] = slType.dataList[i];
    }

    slType.dataList[n] = data;
    slType.listLen++;
    return 1;

}

五、追加节点

 int slAdd(SLType slType,DATA data){
    if(slType.listLen >= MAXLEN){

        System.out.println("顺序表已满,不能继续添加节点!");
        return 0;
    }
    slType.listLen++;
    slType.dataList[slType.listLen] = data;
    return 1;
}

六、删除节点

int slDelete(SLType slType,int n){
    int i;
    if(n < 1 || n > slType.listLen){

        System.out.println("该节点不存在,删除失败!");
        return 0;
    }

    for(i = n;i < slType.listLen;i++){
        slType.dataList[i] = slType.dataList[i + 1];
    }
    slType.listLen--;
    return 1;
}

七、查找节点

1)按照序号查找节点

 DATA slFindByNum(SLType slType, int n){
    if(n < 1 || n > slType.listLen + 1){
        System.out.println("为找到该节点,查找失败!");
        return null;
    }

    return slType.dataList[n];
}

2)按照关键字查找节点

int slFindByCont(SLType slType, String keynode){
    int i;
    for(i = 1;i <= slType.listLen;i++ ){
        if(slType.dataList[i].keyNode.compareTo(keynode) == 0){
            return i;
        }
    }
    return 0;
}

八显示所有节点

int slAll(SLType slType){
    int i;
    for(i = 1;i <= slType.listLen;i++){
        System.out.println("关键字:"+slType.dataList[i].keyNode+
        "name:"+slType.dataList[i].name+"age:"+
        slType.dataList[i].age);
    }
    return 0;
}

完整代码

package DS;

import java.util.Scanner;

/**
 * @author 孟恩德
 * @function : 顺序表操作实例
 */
public class Demo04 {
public static void main(String[] args){

    int i;
    SLType sl = new SLType();
    DATA pdata;
    String key;
    System.out.println("顺序表操作实例:");

    sl.slInit(sl);
    System.out.println("初始化顺序表完成!");

    Scanner input = new Scanner(System.in);

    do {
        System.out.println("请输入添加的节点(学号 姓名 年龄(年龄为0是结束添加)):");

        DATA data = new DATA();
        data.keyNode = input.next();
        data.name = input.next();
        data.age = input.nextInt();

        if (data.age != 0) {
            if(sl.slAdd(sl,data) == 0){
                break;
            }
        }else{
            break;
        }
    }while (true);

    System.out.println("顺序表中的节点为:");
    sl.slAll(sl);

    System.out.println("请输入要取出节点的序号:");
    i = input.nextInt();
    pdata = sl.slFindByNum(sl,i);
    show(pdata,i);

    System.out.println("请输入要查找节点的学号!");

    key = input.next();
    i = sl.slFindByCont(sl,key);
    pdata = sl.slFindByNum(sl,i);
    show(pdata,i);

}
private static void show(DATA data, int i){
    if(data != null){
        System.out.println("第"+i+"个节点:");
        System.out.println("学号:"+data.keyNode);
        System.out.println("名字:"+data.name);
        System.out.println("年龄:"+data.age);
    }

}
}


class DATA{
/**
 * 准备数据
 */
String keyNode;
String name;
int age;

}

@SuppressWarnings("ALL")
class SLType{
/** 定义顺序表结构 */
private static final int MAXLEN = 100;
DATA[] dataList = new DATA[MAXLEN];
int listLen;

/**初始化顺序表*/
void  slInit(SLType slType){
    slType.listLen = 0;
}

/**计算顺序表长度*/
int slLength(SLType slType){
    return (slType.listLen);
}

/**
 * 插入节点
 * slType : 类型;
 * n : 插入节点的序号;
 * data : 插入节点的数据;
 * */
int slInsert(SLType slType , int n , DATA data){
    int i;

    if(slType.listLen >= MAXLEN){

        System.out.println("顺序表已满,无法插入节点!");
        //返回0 代表插入失败
        return 0;
    }

    if(n < 1 || n > slType.listLen - 1){
        System.out.println("插入节点序号有误,插入失败!");
        return 0;
    }

    for(i = slType.listLen;i >= n;i--){

       slType.dataList[i + 1] = slType.dataList[i];
    }

    slType.dataList[n] = data;
    slType.listLen++;
    return 1;

}

/**
 * 追加节点
 * slType : 类型;
 * data : 追加节点的数据;
 * */
int slAdd(SLType slType,DATA data){
    if(slType.listLen >= MAXLEN){

        System.out.println("顺序表已满,不能继续添加节点!");
        return 0;
    }
    slType.listLen++;
    slType.dataList[slType.listLen] = data;
    return 1;
}

/**
 * 删除节点
 * slType : 类型;
 * n : 删除节点的序号;
 * */

int slDelete(SLType slType,int n){
    int i;
    if(n < 1 || n > slType.listLen){

        System.out.println("该节点不存在,删除失败!");
        return 0;
    }

    for(i = n;i < slType.listLen;i++){
        slType.dataList[i] = slType.dataList[i + 1];
    }
    slType.listLen--;
    return 1;
}

/**按照序号查找节点
 * slType : 类型;
 * n : 要查找节点的序号;
 * */
DATA slFindByNum(SLType slType, int n){
    if(n < 1 || n > slType.listLen + 1){
        System.out.println("为找到该节点,查找失败!");
        return null;
    }

    return slType.dataList[n];
}

/**按照关键字查找节点
 * slType : 类型;
 * keynode : 要查找节点的关键字;
 * */

int slFindByCont(SLType slType, String keynode){
    int i;
    for(i = 1;i <= slType.listLen;i++ ){
        if(slType.dataList[i].keyNode.compareTo(keynode) == 0){
            return i;
        }
    }
    return 0;
}

/**显示所有节点*/
int slAll(SLType slType){
    int i;
    for(i = 1;i <= slType.listLen;i++){
        System.out.println("关键字:"+slType.dataList[i].keyNode+
        "name:"+slType.dataList[i].name+"age:"+
        slType.dataList[i].age);
    }
    return 0;
    }
}

第一次写博客,以后继续努力,希望大家多多支持!


猜你喜欢

转载自blog.csdn.net/qq_38595560/article/details/81350354