1.本文章主要介绍的是对数据结构中用C语言来实现静态顺序表的一些操作。
2.如果您觉得本文章对你有帮助的话,可以点个赞什么的~
3.如果你正在学习C或者C++或者数据结构的一些内容,那么欢迎你加入我的交流群:637987498。本群不包含任何广告,纯粹为编程爱好者交流。
注意:本文章适合有c语言基础的人看
废话不多说,直接上代码
/*
@Time:2021/7/27
@Author:King
@Content:顺序表的静态实现方式
@ContactByQQ:1224608672
*/
#include<iostream>
using namespace std;
#define MAXSIZE 10//最大长度
typedef struct{
int data[MAXSIZE];//简单存储类型为 int 的数据, 利用 数组
int length;//当前长度
}SqList;// Sequence List 的简写
//初始化
void InitList(SqList &L){
//所有数据置0
for(int i=0;i<MAXSIZE;i++){
L.data[i]=0;
}
//当前长度置0
L.length=0;
}
//销毁
bool DestoryList(SqList &L){
if(L.length>=0){
L.length=0;
cout<<"销毁成功"<<endl;
return true;
}
cout<<"销毁失败"<<endl;
return false;
}
//增加(即插入一个数据)
/*
L:插入的表
i:插入的位置的索引
elem:要插入的值, elem是element(元素)的缩写
*/
bool InsertList(SqList &L,int i,int elem){
//判断插入的位置是否在0和 当前表长 之间
if(i<0||i>L.length+1){
cout<<"插入位置不合法"<<endl;
return false;
}
//判断表是否满了
if(L.length==MAXSIZE){
cout<<"表已满,无法再添加值"<<endl;
return false;
}
//插入操作,在第i个位置插入值
for(int j=i-1;j<L.length;j++){
//从第i个开始所有元素后移
int k = j;
k++;
L.data[k]=L.data[j];
}
L.data[i-1]=elem;//第i个元素对应的数组下表是i-1,因为数组从0开始,不是1
L.length++;
return true;
}
//查找
// 按值查找, 寻找是否存在 某值,如果存在的话,返回索引
int FindListByElem(SqList &L,int elem){
for(int i=0;i<L.length;i++){
if(L.data[i]==elem){
return i+1;
}
}
return -1;
}
//按位查找 返回数值
int FindListByLocation(SqList &L,int i){
// 判断位置是否合法
if(i<0||i>L.length){
cout<<"查询位置不合法"<<endl;
return false;
}
return L.data[i-1];
}
//删除,
//按位值删除
/*
L:表
i: 第i个元素
*/
bool DeleteListByLocation(SqList &L,int i){
// 判断位置是否合法
if(i<0||i>L.length){
cout<<"删除位置不合法"<<endl;
return false;
}
//删除,直接用后面的值覆盖前面的
for(int j=i-1;j<L.length;j++){
int k = j;
k++;
L.data[j]=L.data[k];
}
L.length--;
return true;
}
//按data中的存的值来删除,此时data存的是int类型的值
/*
elem:传入的值
*/
bool DeleteListByElem(SqList &L,int elem){
int index=0;
//找到要删除的值的下标
index=FindListByElem(L,elem);
if(index==-1) return false;//index为-1说明没查到,所以返回 false
//利用按位删除来删除索引为index的元素
return DeleteListByLocation(L,index);//返回true,因为是按位置,所以要索引+1
}
//修改
bool UpdateList(SqList &L,int i,int elem){
// 判断位置是否合法
if(i<0||i>L.length){
cout<<"修改位置不合法"<<endl;
return false;
}
L.data[i-1]=elem;
return true;
}
//展示
void showDatas(SqList *L){
if(L->length==0){
cout<<"当前表内没有任何数据"<<endl;
return;// 本语句代表退出函数,下方代码不再执行
}
for(int i=0;i<L->length;i++){
cout<<"第"<<i+1<<"个值:"<<L->data[i]<<endl;
}
}
然后在主函数中测试以上功能
int main(){
/*
测试代码
*/
SqList L;//定义
InitList(L);//初始化
//添加数据测试
InsertList(L,1,13);
InsertList(L,2,14);
InsertList(L,3,15);
//删除测试,以添加的第三个数据为例
// DeleteListByLocation(L,3);
DeleteListByElem(L,15);
//查找测试,以第二个为例
cout << "第二个值是" << FindListByLocation(L, 2) << endl;
cout << "查找元素14的索引是" << FindListByElem(L, 14) - 1 << endl;
//修改测试,以第一个值为例
UpdateList(L, 1, 999);
cout << "顺序表中存在的值如下:" << endl;
showDatas(&L);
//销毁测试
DestoryList(L);
showDatas(&L);
}
输出结果如下:
第二个值是14
查找元素14的索引是1
顺序表中存在的值如下:
第1个值:999
第2个值:14
销毁成功
当前表内没有任何数据
和我们预想的一样,编译器没有报错和警告,大功告成。
最后,欢迎各位加入交流群637987498来一同交流,共同进步!