线性表定义:零个或多个数据元素的有限序列。
- 序列:代表线性表的元素是有序列的。
- 有限元素:线性表的元素个数是有限的
一:线性表数据定义
线性表定义是一个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;
}