线性表

线性表是一种数据结构,其特点为每个元素有一个前驱和一个后继,支持在任意位置插入和删除操作。该文介绍了线性表的抽象数据类型,包括初始化、获取元素个数、插入和删除等操作。接着详细讲解了顺序表的静态数组和动态数组实现,并重点阐述了链表的概念,包括单链表、双链表和循环链表的特性。此外,还提供了链表的实践练习,如有序插入和链表排序。

线性表

概述

定义

  • 除了第一个元素和最后一个元素之外,每一个元素都只有一个前驱元素和一个后继元素

  • 线性表是一种可以在任意位置进行插入和删除操作的,由n个同类型数据组成的线性结构

抽象数据类型

  • 数据集合:每个数据元素的数据类型都是抽象数据元素的数据类型DataType

  • 操作集合:

    1.初始化:ListInitiate(L) 初始化线性表L

    1. 求当前元素的个数ListLength(L)
    2. 插入数据元素ListInsert(L,i,x):在线性表L的第i个数据元素前插入元素x,插入成功返回1否则返回0
    3. 删除数据元素ListDelete(L,i,x):删除线性表L的第i个元素,所删除的数据由x带回
    4. 取数据元素ListGet

顺序表

  • 静态数组实现顺序表

    MaxSize:数组list的最大存储单元个数

    list:用于存储顺序表数据的数组

    size:当前存储的数据元素个数

    代码实现

    package list;
    
    
    public class seqList<T> {
         
         
        //表示数组元素的最大个数
        public int MaxSize;
        //用于存储顺序表数据的数组
        public Object[] list;
        //size表示顺序表当前存储的数据元素个数
        int size;
    
        seqList()
        {
         
         
    
        }
        seqList(int maxSize)
        {
         
         
            this.MaxSize=maxSize;
            this.list=new Object[MaxSize];//直接建立引用就好了
            listInitiate();
        }
    
        //初始化定义数据元素个数
        public void listInitiate()
        {
         
         
            size=0;
        }
    
        //求当前元素的个数
        public int listLength()
        {
         
         
            return size;
        }
    
        //插入数据元素,成功返回true,失败返回false
        public boolean listInsert(int i,T x)
        {
         
         
            //判断插入的位置在i<=size
            if(i<0||i>size)
            {
         
         
                System.out.println("插入位置不合法");
                return false;
            }
            //判断顺序表没有满
            if(size>=MaxSize)
            {
         
         
                System.out.println("顺序表已满");
                return false;
            }
            //后面的元素往后移
            for(int j=size;j>i;j--)
            {
         
         
                list[j]=list[j-1];
            }
    
            //把数据插入到空位中
            list[i]=x;
            //个数增加1
            size++;
            return true;
        }
    
        //删除数据元素
        public boolean listDelete(int index)
        {
         
         
            //判断有没有元素,没有则返回
            if(size==0)
            {
         
         
                System.out.println("list is null");
                return false;
            }
            //判断坐标是否合理
            if(index>size||index<0)
            {
         
         
                System.out.println("index is not valid");
                return false;
            }
    
            for(int i=index;i<size-1;i++)
            {
         
         
                list[i]=list[i+1];
            }
            size--;
            return true;
        }
    
        public T listGet(int index)
        {
         
         
            //判断取得坐标是否合法
            if(index<0||index>size)
            {
         
         
                System.out.println("index is not valid");
                return null;
            }
    
            return (T)list[index];
        }
    
        //打印顺序表
        public void listShow()
        {
         
         
            for(int i=0;i<size;i++)
            {
         
         
                System.out.println(list[i]);
            }
        }
    
    
    }
    
    

实例化

package list;

/*
* 建立一个学生情况表。依次显示当前表中得数据元素,假设元素不会超过100个
* 表中存储信息:学号 性别 年龄
* */
class Student{
   
   
    int number;
    String name;
    String sex;
    int age;

    public Student(int number, String name, String sex, int age) {
   
   
        this.number = number;
        
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值