顺序表的各项操作

2021/4/13 18:56:57

本文主要是介绍顺序表的各项操作,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

数据结构顺序表的各项操作

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 20
typedef int ElemType;
typedef struct{
        ElemType  data[MaxSize];
        ElemType length;
    }SqList;
void CreateList(SqList *&L,ElemType a[],ElemType n){
    int i=0,k=0;
    L=(SqList *)malloc(sizeof(SqList));
    while(i<n){
        L->data[k]=a[i];
        k++;
        i++;
    }
    L->length=k;
    printf("创建顺序表成功\n");
}
void DisplayList(SqList *&L){
    for(int i=0;i<L->length;i++){
        printf("%d\n",L->data[i]);
    }
}
void ListEmpty(SqList *&L){
    if(L->length==0)
        printf("该顺序表为空表\n");
    else
        printf("该顺序表不为空\n");
}
int ListLength(SqList *&L){
    return(L->length);
}
int GetElem(SqList *&L,int i){
    if(i<1||i>L->length){
        printf("error\n");
        return -1;
    }
    else
        return(L->data[i-1]);
}
void  LocateElem(SqList *&L,int e){
    int i=0,t=0;
    while(i<L->length){

        if(L->data[i]==e){
        printf("数字的序号是%d\n",i);
        t=1;

        }
        i++;
    }
    if(i>=L->length&&t==0)
        printf("顺序表中不存在该数\n");
}
bool ListInsert(SqList *&L,int i,int e){
    if(i<1&&i>L->length+1)//大于length+1是为了多一个位置插入元素
        return false;
    i--;
    for(int j=L->length;j>i;j--){//j>i是为了在这后面插入一个数
        L->data[j]=L->data[j-1];
    }
    L->data[i]=e;
    L->length++;
    return true;
}
bool ListDelete(SqList *&L,int i){
    if(i<1||i>L->length)
        return false;
    i--;
    for(int j=i;j<L->length;j++)
        L->data[j]=L->data[j+1];
    L->length--;
    return true;
}
void DestroyList(SqList *&L){
    free(L);
    printf("销毁顺序表成功\n");
}
void AlterList(SqList *&L,int i,int e){
    if(i<1||i>L->length){
        printf("输入的顺序号有误\n");
       return;
    }
    i--;
    L->data[i]=e;
}
int main()
{
    int length;
    int List_length,order,number,elem,i,e,number2,n;
    SqList *L;
    ElemType data[MaxSize];
    printf("请输入顺序表的长度和数据:");
    scanf("%d",&length);
    for(int i=0;i<length;i++){
        scanf("%d",&data[i]);
    }
    printf("<-顺序表的操作->\n");
    printf("1:创建顺序表\n");
    printf("2:销毁顺序表\n");
    printf("3:输出顺序表\n");
    printf("4:输出顺序表的长度\n");
    printf("5:判断顺序表是否为空\n");
    printf("6:顺序表插入数据\n");
    printf("7:删除顺序表的数据\n");
    printf("8:修改顺序表的值\n");
    printf("9:按照序号查询顺序表的值\n");
    printf("10:按照值查询顺序表的值\n");

    while(1){
        printf("请输入你要执行的操作序号:");
        scanf("%d",&n);
        switch(n){
            case 1:CreateList(L,data,length);
            break;
            case 2:DestroyList(L);
            break;
            case 3:DisplayList(L);
            break;
            case 4:List_length=ListLength(L);
                    printf("该顺序表的长度是:%d\n",List_length);
            break;
            case 5:ListEmpty(L);
            break;
            case 6:printf("请输入插入序号和插入数字:");
                   scanf("%d %d",&i,&e);
                   ListInsert(L,i,e);
            break;
            case 7:printf("请输入删除数据的序号:");
                    scanf("%d",&number2);
                    ListDelete(L,number2);
            break;
            case 8:printf("请输入要修改的序号和插入数字:");
                   scanf("%d %d",&i,&e);
                   AlterList(L,i,e);
            break;
            case 9:printf("请输入查找数的序号:");
                    scanf("%d",&order);
                    elem=GetElem(L,order);
                    printf("第%d个数是:%d\n",order,elem);
            break;
            case 10: printf("请输入查找数是:");
                    scanf("%d",&number);
                    LocateElem(L,number);
            break;
            default:
                printf("请输入正确的操作序号\n");
        }
    }
    return 0;
}



这篇关于顺序表的各项操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程