数据结构——顺序表(C语言)

数据结构——顺序表基本操作(C语言)

  • 1.初始化
  • 2.创建
  • 3.插入
  • 4.删除
  • 5.按值查找
  • 6.打印
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 10010
#define ElemType int
typedef struct {
    ElemType data[MAXSIZE];
    int length;
}SeqList;
//顺序表初始化
bool InitList(SeqList *l){
     l->length=0;
     return true;
}
//顺序表创建
bool CreateList(SeqList *l,ElemType x){
    if(l->length > MAXSIZE)
        return false;
    l->data[l->length++]=x;
    return true;

}
//顺序表元素插入
bool ListInsert(SeqList *l,int index,ElemType e){
    if(index> l->length||index<0||(l->length+1)>MAXSIZE){
        return false;
    }
    for(int i= l->length-1; i>=index;i--){
        l->data[i+1]=l->data[i];
    }
    l->data[index]=e;
    l->length++;
    return true;
}
//顺序表元素删除
bool DeleteList(SeqList *l,int index,ElemType &e){
    if(index> l->length-1||index<0){
        return false;
    }
    e=l->data[index];
    for(int i=index;i< l->length-1;i++){
        l->data[i]=l->data[i+1];
    }
    l->length--;
}
//顺序表按值查找
bool findElemByValue(SeqList *l,ElemType e,int &index){
    int i;
    for(i=0;(i< l->length)&& (e !=l->data[i]);i++);
    if(i == l->length)
        return false;
    else{
        index= i;
        return true;
    }
}
void Check(bool flag,int value){
    if(flag==true){
        printf("操作成功!\n");
        if(value !=NULL)
            printf("操作结果返回值为:%d\n",value);
    }else{
        printf("操作失败!\n");
    }
}
顺序表打印
void PrintList(SeqList *l){
    for(int i=0;i< l->length;i++){
        printf("%d ",l->data[i]);
    }
    printf("\n");
}
int main(){
    int n;
    printf("输入元素个数:");
    scanf("%d",&n);
    //1.初始化顺序表
    SeqList list1;
    printf("初始化顺序表");
    bool flag=InitList(&list1);
    if(flag == true){
        printf("初始化完成!\n");
    }else{
        printf("初始化失败!\n");
    }
    printf("开始存储元素\n");
    //2.创建顺序表
    while(n--){
        printf("输入元素:");
        int elem;
        scanf("%d",&elem);
        bool flagC=CreateList(&list1,elem);
        if(flagC == false){
            printf("创建失败!\n");
            return 0;
        }
    }
     printf("欢迎使用顺序表");
    while(1){
        printf("\n请选择操作\n1.插入\n2.删除\n3.按值查找\n4.打印所有元素\n");
        int op;
        int index,e;
        bool flag;
        scanf("%d",&op);
        switch(op%10){
            case 1:
                //3.指定位置插入元素,操作成功时打印删除元素值
                printf("输入插入位置(下标)与插入元素:\n");
                scanf("%d %d",&index,&e);
                flag=ListInsert(&list1,index, e);
                Check(flag,e);
                break;
            case 2:
                //4.删除操作,操作成功时打印删除元素值
                printf("输入删除位置(下标):\n");
                scanf("%d",&index);
                flag=DeleteList(&list1,index,e);
                Check(flag,e);
                break;
            case 3:
                //5.按值查找,操作成功时打印删除元素下标
                printf("输入查找元素的值:\n");
                scanf("%d",&e);
                flag=findElemByValue(&list1,e,index);
                Check(flag,index);
                break;
            case 4:
                //6.打印顺序表
                PrintList(&list1);
                break;
            default:
                printf("error\n");
                break;
        }
    }
    return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值