线性表顺序表的基本操作-C语言实现

#include <stdio.h>
#include <stdbool.h> //由于使用bool类型,需要头文件包含stdbool.h

#define MAX 100  //定义最大长度

typedef int ElemType;
typedef int Status;

//动态内存分配-test
//#define InitSize 100
//typedef struct{
//    ElemType* data;
//    int length,Max;
//}Seqlist;


//静态分配
typedef struct{
    ElemType data[MAX];
    int length;
}Seqlist;






//1.初始化线性表
void InitList(Seqlist *L){
    L->length=0;
}

//2.线性表 创建
void CreateList(Seqlist *L,ElemType a[],int n){
    for(int i=0;i<n;i++){
        L->data[i]=a[i];
        L->length++;
    }
    printf("线性表创建完成!\n");
}

//3.返回线性表表长
int Length(Seqlist *L){
    return L->length;
}

//4.按值查找,打印结果
void LocateElem(Seqlist *L,ElemType e){
    int index=0; //创建索引
    for(int i=0;i<L->length;i++){
        if(L->data[i]==e){
            index=i+1;
            printf("%d元素在线性表的%d位置.\n",e,index);
        }
    }
    if(index==0){
        printf("表中无%d元素!\n",e);
    }
}

//5.按位查找,找到该位元素并打印输出
void GetElem(Seqlist* L,int i){
    if(i>L->length||i<1){
        printf("i输入不合法!\n");
    }else{
        printf("%d号位上的元素是%d\n",i,L->data[i-1]);
    }
}

//6.插入操作,在表上的第i个位置插入元素e
bool InsertList(Seqlist* L,int i,ElemType e) {
    if(i<1||i>L->length+1){
        printf("插入的第i个位置不合法!\n");
        return false;
    }
    if(L->length>=MAX){
        printf("存储空间已满!\n");
        return false;
    }

    //包含i位置及之后元素后移,采取从后往前的方法
    for(int j=L->length;j>=i;j--){
        L->data[j]=L->data[j-1];
    }
    //第i个位置填充e
    L->data[i-1]=e;

    //(*L).length++  长度加一
    L->length++;

    return true;

}

//7.打印线性表
void PrintList(Seqlist* L) {
    for(int i=0;i<L->length;i++){
        printf("%d ",L->data[i]);
    }
    printf("\n");
}

//8.删除第i个元素
bool DeleteElem(Seqlist* L,int i){

    if(i<1||i>L->length){
        printf("删除的的第i个位置不合法!\n");
        return false;
    }

    for(int j=i;j<L->length;j++){
        L->data[j-1]=L->data[j];
    }

    L->length--;
    return true;
}

//9.

int main(){

    Seqlist L,*p=&L;

    //1.线性表的初始化
    InitList(p);

    //2.线性表创建
    ElemType arr[]={4,1,8,5,5,12,-2,9};
    CreateList(p,arr,8);

    //3.求线性表表长
    printf("线性表L的表长为:%d\n", Length(p));

    //4.按值x查找,打印结果
    printf("现在按值查找该表,请输入查找元素:");
    int x1;
    scanf("%d",&x1);
    LocateElem(p,x1);

    //5.按位查找,找到该位元素并输出
    printf("请输入按位查找的i值:");
    int x2;
    scanf("%d",&x2);
    GetElem(p,x2);

    //6.插入操作,在表上的第x1个位置插入元素e
    // 7.打印线性表
    printf("输入位置i和待插入元素:");
    int e;
    int x3;
    scanf("%d%d",&x3,&e);
    if(InsertList(p,x3,e)){
        printf("插入成功!打印插入后的线性表:");
        PrintList(p);
    }else{
        printf("插入失败!");
    }

    //8.删除第i个元素
    printf("输入待删除位置i:");
    int x4;
    scanf("%d",&x4);
    if(DeleteElem(p,x4)){
        printf("删除成功!打印删除后的线性表:");
        PrintList(p);
    }else{
        printf("删除失败!\n");
    }



    return 0;


}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值