数据结构-线性表(一)

这篇博客介绍了线性表的基本概念,包括它是有限数据元素的有序序列。内容涵盖了线性表的C++结构体定义、初始化过程,以及线性表元素的添加、删除和获取操作。线性表的特点在于通过下标能快速获取元素,但插入和删除操作需要遍历数组。
摘要由CSDN通过智能技术生成

线性表定义:零个或多个数据元素的有限序列。

  • 序列:代表线性表的元素是有序列的。
  • 有限元素:线性表的元素个数是有限的

一:线性表数据定义

线性表定义是一个C++的结构体,在结构体里面是一个固定长度的数组,和记录线性表的元素的个数所以,线性表结构定义如下:

typedef struct sqList{
    int data[100];
    int length;
};

二:线性表的初始化

为了方便理解,这里采取了单个元素依次初始化,初始化就是给线性表数组加值,然后,length相应的加加。代码如下:

int initList(sqList *sqList1){
    sqList1->data[0] = 1;
    sqList1->data[1] = 6;
    sqList1->data[2] = 3;
    sqList1->data[3] = 7;
    sqList1->length = 4;
}

可以从上面看到线性表的数组依次赋值,然后,length等于元素个数。

三,线性表的删除和添加

由结构体可以看到线性表是一个数组类型,对线性表的删除和添加需要遍历,比如需要删除线性表的一个元素则需要把线性表所删除元素的后续元素移动位置,length数量减一。代码如下:

void deleteSqList(sqList *sqList1,int index){
    index--;
    if (index>sqList1->length-1 || index<0){
        std::cout << "非法位置" << std::endl;
        exit(0);
    }
    for (int i = index; i < sqList1->length-1; ++i) {
        sqList1->data[i] = sqList1->data[i+1];
    }
    sqList1->length--;

}

线性表的添加和删除类似都需要遍历改变元素原有的位置。代码如下:

void insertSqList(sqList *sqList1, int value,int index){
    index--;
    if(index<0||index>sqList1->length-1){
        std::cout<<"位置错误"<<std::endl;
        exit(0);
    }

    for(int i = sqList1->length-1;i >= index;i--){
        sqList1->data[i+1] = sqList1->data[i];
    }
    sqList1->data[index] = value;
    sqList1->length++;

}

四,线性表的获取

线性表的获取就是线性表的优点处,因为线性表是有下表位置的,所以获取一个元素,只需要告诉需要获取的位置,则直接可以从线性表的某个位置按照数组的下标直接取出来。代码如下:

void printSqList(sqList sqList1){
    if (sqList1.length <=0){
        std::cout << "当前为空" << std::endl;
        exit(0);
    }
    for (int i = 0; i <= sqList1.length-1; ++i) {
        std::cout <<"data位置"<<i<<"值"<< sqList1.data[i] << std::endl;
    }
}

五,线性表的总结

该数据结构是一种在取值上很方便但是,插入和删除是需要遍历的结构。

可运行代码如下:

#include <iostream>
typedef struct sqList{
    int data[100];
    int length;
};

int initList(sqList *sqList1){
    sqList1->data[0] = 1;
    sqList1->data[1] = 6;
    sqList1->data[2] = 3;
    sqList1->data[3] = 7;
    sqList1->length = 4;
}

void printSqList(sqList sqList1){
    if (sqList1.length <=0){
        std::cout << "当前为空" << std::endl;
        exit(0);
    }
    for (int i = 0; i <= sqList1.length-1; ++i) {
        std::cout <<"data位置"<<i<<"值"<< sqList1.data[i] << std::endl;
    }
}

void insertSqList(sqList *sqList1, int value,int index){
    index--;
    if(index<0||index>sqList1->length-1){
        std::cout<<"位置错误"<<std::endl;
        exit(0);
    }

    for(int i = sqList1->length-1;i >= index;i--){
        sqList1->data[i+1] = sqList1->data[i];
    }
    sqList1->data[index] = value;
    sqList1->length++;

}


void deleteSqList(sqList *sqList1,int index){
    index--;
    if (index>sqList1->length-1 || index<0){
        std::cout << "非法位置" << std::endl;
        exit(0);
    }
    for (int i = index; i < sqList1->length-1; ++i) {
        sqList1->data[i] = sqList1->data[i+1];
    }
    sqList1->length--;

}





int main() {
    sqList sqList1;
    initList(&sqList1);
    insertSqList(&sqList1,5,2);
    deleteSqList(&sqList1,2);
    printSqList(sqList1);
    return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值