数据结构-->线性表

来源:互联网 发布:radeon pro 580windows 编辑:程序博客网 时间:2024/05/23 18:31

package 线性表;

import java.util.Scanner;

class DATA {
/* 定义节点 */
String key;// 关键字
String name;
int age;

}
public class Linelist {

/* 定义顺序表的结构 */static final int MAXINT = 100;// 顺序表的最大长度DATA[] data = new DATA[MAXINT + 1];// 保存顺序表的结构数组int ListLen;// 顺序表已存节点的数量/* 初始化顺序表 */public void ListInit(Linelist list) {    list.ListLen = 0;}/* 返回顺序表的元素数量 */public int Listnum(Linelist list) {    return (list.ListLen);}/* 顺序表的插入 */public int lineInsert(Linelist list, int n, DATA data0) {    int i;    if (list.ListLen >= MAXINT) {// 顺序表节点数量已经超过最大数量        System.out.println("顺序表已满,不能插入");        return 0;// 返回0表示插入失败    }    if (n < 1 || n > MAXINT + 1) {// 如果插入的节点序号不正确        System.out.println("插入的节点不正确,不能插入元素");        return 0;    }    for (i = list.ListLen; i >= n; i--) {        list.data[i + 1] = list.data[i];// 将顺序表中的节点向后移动    }    list.data[n] = data0;// 插入节点    list.ListLen++;// 顺序表中节点数量加1    return 1;// 插入成功返回1}/* 添加元素到顺序表尾部 */public int listAdd(Linelist list, DATA data0) {    if (list.ListLen >= MAXINT) {        System.out.println("顺序表已满,不能再添加元素了");        return 0;// 添加节点失败    }    list.data[++list.ListLen] = data0;    return 1;}/* 删除顺序表中的元素 */public int listDelete(Linelist list, int n) {    int i;    if (n < 1 || n > list.ListLen + 1) {        System.out.println("删除节点序号不正确,请从新输入");        return 0;    }    for (i = list.ListLen; i >= n; i--) {        list.data[i] = list.data[i + 1];// 元素向前移动    }    list.ListLen--;    return 1;// 删除成功}/* 根据序号返回返回数据元素 */DATA findByNum(Linelist list, int n) {    if (n < 1 || n > list.ListLen + 1) {        System.out.println("节点序号错误,不能返回节点");        return null;    }    return list.data[n];}/* 按关键字查询节点 */public int findkey(Linelist list, String key) {    int i;    for (i = 1; i <= list.ListLen; i++) {        if (list.data[i].key.compareTo(key) == 0) {// 如果照到所需要的节点            return i;// 返回节点序号        }    }    return 0;}/* 显示顺序表中的所有节点 */public int listAll(Linelist list) {    int i;    for (i = 1; i <= list.ListLen; i++) {        System.out.printf(("%s,%s,%d"), list.data[i].key, list.data[i].name, list.data[i].age);    }    return 0;}public static void main(String[] args) {    int i;    Linelist list = new Linelist();// 定义顺序表变量    DATA pdata;// 定义节点,保存引用变量    String key;// 保存关键字    System.out.println("顺序表操作演示");    list.ListInit(list);// 初始化线性表    System.out.println("初始化线性表完成");    Scanner sc = new Scanner(System.in);    do {        // 循环添加节点数据        System.out.println("输入添加的节点:(学号,姓名,年龄):");        DATA data = new DATA();        data.key = sc.next();        data.name = sc.next();        data.age = sc.nextInt();        // 如果年龄不为0        if (data.age != 0) {            if (list.listAdd(list, data) == 0) {// 若添加节点失败                break;            }        } else {            // 若年龄为0            break;        }    } while (true);    System.out.println("要取出的节点序号");    i = sc.nextInt();    pdata = list.findByNum(list, i);    if (pdata != null) {        // 若返回的节点引用不为空        System.out.printf("第%d个节点为(%s,%s,%d)", i, pdata.key, pdata.name, pdata.age);    }    System.out.println("要查找节点的关键字:");    key = sc.next();    i = list.findkey(list, key);// 按关键字查找返回关键字    pdata = list.findByNum(list, i);// 按序号查询,返回节点引用    if (pdata != null) {// 若节点引用不为空        System.out.printf("第%d个节点为:(%s,%s,%d)", i, pdata.key, pdata.name, pdata.age);    }}

}

原创粉丝点击