数据结构顺序表的创建及操作
-
结构体创建(两种结构体定义方式)
方式一:给结构体Sqlist定义了个别名
typedef struct Sqlist{
int elem[MAXSIZE];
int length;
}Sqlist_t;
方式二:定义一个名字为Sqlist的结构体
struct Sqlist{
int elem[MAXSIZE];
int length;
};
区别之处在于第一种方式给结构体定义了个别名
注释:
int elem[MAXSIZE]:表示定义一个数据类型为int的数组用于存储int型数据(根据你要存储的数据类型可自由修改),MAXSIZE代表数组长度
int length:表示结构体的另一个属性(用于表示从第几个数据开始为空)
2.初始化赋值
void create(Sqlist &L){
int n;
printf("要输入数据的个数:");
scanf("%d",&n);
fflush(stdin);
while(n > MAXSIZE){
printf("越界、请从新输入:");
scanf("%d",&n);
fflush(stdin);
}
L.length = ;//表示第几个数据开始为空
for(int i = ; i < n; i++){
L.elem[L.length]=i;
L.length++;
}
}
3.数据展示
void show(Sqlist L){
int i = ;
while(i<L.length){
printf("%d\n",L.elem[i]);
i++;
}
}
4.数据删除
void delData(Sqlist &L,int id){
if(id < || id >= L.length){
printf("输入有误!");
}else{
for(int i = id; i < L.length; i++){
L.elem[i-] = L.elem[i];
}
L.elem[L.length]=NULL;
L.length--;
}
}
注释:
id:表示要删除的位置(要做判断避免越界);
从第id个位置开始将后面的数据都往前提一位(for循环的功能);
L.elem[L.length]=NULL;表示将最后一位设为NULL(空);
L.length–;表示第几个位置开始为空;
5.添加数据
void addData(Sqlist &L,int id,int data){
if(id < || id > L.length){
printf("输入有误!");
}else{
for(int i = L.length; i >= id; i--){
L.elem[i] = L.elem[i-];
}
L.elem[id-] = data;
L.length++;
}
}
注释:
id:表示位置、位置必须连续
从第id个位置开始将后面的数据都往后一位(for循环的功能);
L.elem[id-1]=data;表示将第id位设为data;
L.length++;表示第几个位置开始为空;
6.取数据(按位置取、并返回值)
int selectData(Sqlist L,int id){
if(id < || id >= L.length){
printf("输入有误!");
return -;
}else{
int data = L.elem[id-];
return data;
}
}
7.数据匹配(按值匹配,返回第一次出现的位置)
int findId(Sqlist L,int data){
for(int i = ; i < L.length; i++){
if(L.elem[i] == data){
return i+;
}
}
return -;
}
注释:
遍历每一个位置进行匹配、匹配成功,则返回位置。否则返回-1
8.主方法
void main(){
Sqlist La;//定义一个名字为La的结构体变量
create(La);//初始化赋值
show(La);//数据展示
addData(La,,);//在第四个位置添加数据20
show(La);
delData(La,);//删除第七个位置数据
show(La);
int data = selectData(La,);//查找第二位置的数据
printf("%d\n",data);
int id = findId(La,);//匹配数据8的第一个位置
printf("%d\n",id);
}
谢谢大家、欢迎补充!大家一起学习。