【数据结构】顺序表操作实例

数据结构——顺序表操作实例

顺序表(Sequential List)就是按照顺序存储方式存储的线性表,该线性表的结点按照逻辑次序依次存放在计算机的一组连续的存储单元中。

顺序表的操作示例代码如下:

package com.company.dataStructure;

import java.util.Scanner;
//顺序表操作实例
class DATA {
    String key; //结点的关键字
    String name;
    int age;
}

class SLType { //定义顺序表结构
    static final int MAXLEN = 100;
    DATA[] ListData = new DATA[MAXLEN + 1]; //保存顺序表的结构数组
    int ListLen;//顺序表已存节点的数量

    void SLInit(SLType SL) { //初始化顺序表
        SL.ListLen = 0;//初始化为空表
    }

    int SLLength(SLType SL) {
        return (SL.ListLen); //返回顺序表的元素数量
    }

    int SLInsert(SLType SL, int n, DATA data) {
        int i;
        if (SL.ListLen >= MAXLEN) { //顺序表结点数量已超过最大数量
            System.out.print("顺序表已满,不能插入结点!\n");
            return 0;
        }
        if (n < 1 || n > SL.ListLen - 1) { //插入结点序号不正确
            System.out.print("插入元素序号错误,不能插入元素!\n");
            return 0;
        }
        for (i = SL.ListLen; i >= n; i--) { //将顺序表中的数据向后移动
            SL.ListData[i + 1] = SL.ListData[i];
        }
        SL.ListData[n] = data;
        SL.ListLen++;
        return 1;
    }

    int SLAdd(SLType SL, DATA data) { //增加元素到队列尾部
        if (SL.ListLen >= MAXLEN) { //顺序表已满
            System.out.print("顺序表已满,不能再添加节点了!\n");
            return 0;
        }
        SL.ListData[++SL.ListLen] = data;
        return 1;
    }

    int SLDelete(SLType SL, int n) { //删除顺序表中的数据元素
        int i;
        if (n < 1 || n > SL.ListLen + 1) {
            System.out.print("删除结点序号错误,不能删除结点!");
            return 0;
        }
        for (i = n; i < SL.ListLen; i++) { //将顺序表中的数据向前移动
            SL.ListData[i] = SL.ListData[i + 1];
        }
        SL.ListLen--; //顺序表元素数量减1
        return 1;
    }

    DATA SLFindByNum(SLType SL, int n) { //根据序号返回数据元素
        if (n < 1 || n > SL.ListLen + 1) { //元素序号不正确
            System.out.print("结点序号错误,不能返回结点!\n");
            return null;
        }
        return SL.ListData[n];
    }

    int SLFindByCont(SLType SL, String key) { //按关键字查询结点
        int i;
        for (i = 1; i < SL.ListLen; i++) {
            if (SL.ListData[i].key.compareTo(key) == 0) { //如果找到所需结点
                return i;
            }
        }
        return 0;
    }

    int SLALL(SLType SL) { //显示顺序表中的所有结点
        int i;
        for (i = 1; i <= SL.ListLen; i++) {
            System.out.printf("(%s, %s ,%d)\n", SL.ListData[i].key, SL.ListData[i].name, SL.ListData[i].age);
        }
        return 0;
    }
}

public class SequentList {
    public static void main(String[] args) {
        int i;
        SLType SL = new SLType(); //定义顺序表变量
        DATA pdata; //定义结点保存引用变量
        String key; //保存关键字
        System.out.print("顺序表操作演示!\n");
        SL.SLInit(SL);
        System.out.print("初始化顺序表完成!\n");
        Scanner input = new Scanner(System.in);
        do {
            System.out.print("输入添加的结点(学号 姓名 年龄):");
            DATA data = new DATA();
            data.key = input.next();
            data.name = input.next();
            data.age = input.nextInt();
            if (data.age != 0) { //若年龄不为0
                if (SL.SLAdd(SL, data) == 0) { //若添加节点失败
                    break;
                }
            } else {
                break; //退出死循环
            }
        } while (true);
        System.out.print("\n顺序表中的结点顺序为:\n");
        SL.SLALL(SL);

        System.out.print("\n要取出结点的序号:");
        i = input.nextInt();
        pdata = SL.SLFindByNum(SL, i); //按序号查找结点
        if (pdata != null) {
            System.out.printf("第%d个结点为:(%s,%s,%d)\n", i, pdata.key, pdata.name, pdata.age);
        }
        System.out.print("\n要查找结点的关键字:");
        key = input.next();
        i = SL.SLFindByCont(SL, key); //按关键字查找,返回结点序号
        pdata = SL.SLFindByNum(SL, i);
        if (pdata != null) {
            System.out.printf("第%d个结点为:(%s,%s,%d)\n", i, pdata.key, pdata.name, pdata.age);
        }
    }
}

 

你可能感兴趣的:(我的学习历程,Algorithms&Data,Structures,数据结构,顺序表,顺序存储结构,线性表,结点)