C语言静态顺序表的基本操作

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个值:9992个值:14
销毁成功
当前表内没有任何数据

和我们预想的一样,编译器没有报错和警告,大功告成。
最后,欢迎各位加入交流群637987498来一同交流,共同进步!
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值