//
// Created by 10841 on 2022/2/11.
// 顺序表就是线性表的顺序表示出来,可以当数组理解
//顺序表 : 顺序表是地址连续的存储单元 依次存取线性表的数据元素
#include <iostream>
using namespace std;
#define MAXSIZE 10
//定义学生 类型
typedef struct Student{
char ID [20];// 没有string类型
char Name[20];
}Student;
//定义线性表 类型
typedef struct {
Student *elem;
int length; //顺序表的长度
}StuList;
/**
* 初始化线性表
* @return
*/
bool InitSequence(StuList &L){
L.elem = new Student[MAXSIZE]; //初始化线性表,就是创建一个学生数组
if(!L.elem){ //判断 线性表是否创建成功
return false;
}
L.length = 0; //线性表初始化后 长度为0
return true;
}
/**
* 线性表的插入
* @param L 线性表变量 带& 是要返回去用
* @param i 插入的位置
* @param stu 插入的数据
* @return
*/
bool InsertSequence(StuList &L,int i,Student stu){
if (i<0 || i > L.length+1){ //判断要插入的位置是否 在合理的区间,这里判断错误1
return false;
}
if(L.length == MAXSIZE){ //判断线性表中是否为满
return false;
}
for (int j = L.length; j >= i-1; --j) { //把插入的位置 空出来 ,之前的数据向后移动,j的判断条件是i
L.elem[j+1] = L.elem[j];
}
L.elem[i-1] = stu; //把学生数据放入到要线性表的位置
L.length++; // 之前的 MAXSIZE是 创建的Student数组,而L是指针,从一开始就没有给 L 分配空间
return true;
}
/**
* 线性表的删除
* @param L
* @param i 删除的位置
* @return
*/
bool DeleteSequence(StuList &L,int i){
if(i<0 || i>L.length-1){ //查看删除位置是否 在合理的区间,,这里判断错误2
return false;
}
for (int j = i; j <L.length-1 ; ++j) {
L.elem[j-1] = L.elem[j]; // j要减一 学生是从0开始的
}
L.length--;
return true;
}
/**
* 拿到 下标为i的数
* @param L
* @param i 下标
* @param S 返回值
* @return
*/
bool GetListI(StuList &L,int i ,Student &S){
if (i<1 || i>L.length){ //i 在合理的区间
return false;
}
S = L.elem[i-1]; //下标从0开始 所以要减一
return true;
}
/**
* 寻找此项 在线性表中的 下标
* @param L
* @param i
* @return
*/
int SelectGetIist(StuList &L ,Student S){
for (int i = 0; i < L.length-1; ++i) {
if (L.elem[i].ID==S.ID){
return i+1;
}
}
return 0;
}
/**
* 把B表插入到L表
* @param L
* @param B
*/
void ListMerge(StuList &L,StuList B){
int i = L.length,j = B.length;
for (int k = 0; k < j; ++k) {
if (!SelectGetIist(L,B.elem[k])){
InsertSequence(L,++i,B.elem[k]);
}
}
}
/**
* 输出所有线性表中的数据
* @param L
* @param i
* @return
*/
Student SelectStudentALL(StuList &L,int i){
// 判断i是否合法 就是有没有超出 线性表的长度,没有比0小
if(i>0 || i<L.length){
return L.elem[i];
}
}
int main(){
StuList demo;
InitSequence(demo);
Student student1 = {"1", "张三"};
Student student2 = {"2", "李四"};
InsertSequence(demo, 1, student1);
InsertSequence(demo, 2, student2);
for (int i = 0; i < demo.length; ++i) {
cout << demo.elem[i].ID << ":" << demo.elem[i].Name <<"\n";
}
GetListI(demo, 1, student2);
cout << student2.ID << student2.Name << "\n";
cout << SelectGetIist(demo, student1) << "\n";
ListMerge(demo, demo);
cout << demo.length;
DeleteSequence(demo,1);
cout << demo.length;
return 0;
}
数据结构——线性表的顺序表示
最新推荐文章于 2023-03-19 01:12:59 发布