0
点赞
收藏
分享

微信扫一扫

顺序表数组实现

野见 2022-04-13 阅读 57
数据结构
//初始化
void InitList(SqList *L)
//创建表
int CreateList(SqList *L,int i)
//求表长
int Length(SqList L)
//按值查找
int LocateElem(SqList L,ElemType e)
//按位查找
int GetElem(SqList L,int i)
//插入
int ListInsert(SqList *L,int i,ElemType e)
//删除
int ListDelete(SqList *L,int i,ElemType *e)
//输出
void PrintList(SqList L)
//判空
int Empty(SqList L)
//置空
int ClearList(SqList *L)
#include<stdio.h>
#define MAX 50
typedef int ElemType;
typedef struct
{
    ElemType data[MAX];
    int length;
}SqList;
//初始化
void InitList(SqList *L)
{
    L->length=0;
}
//创建表
int CreateList(SqList *L,int i)
{
    int ret;
    if(i>MAX)
    {
        printf("Create Error!\n");
        ret=0;
    }
    else{
        int n=0;
        for(int a=0;a<i;a++)
        {
            printf("请输入元素:");
            scanf("%d",&n);
            L->data[a]=n;
            printf("添加元素:%d 成功\n",n);
            L->length++;
        }
        printf("Create Success.\n");
        ret=1;
    }
    return ret;
}
//求表长
int Length(SqList L)
{
    return L.length;
}
//按值查找
int LocateElem(SqList L,ElemType e)
{
    int ret=0;
    for(int i=0;i<L.length;i++)
    {
        if(L.data[i]==e){
            printf("%d在第%d位\n",e,i+1);
            ret++;
        }
    }
    return ret;
}
//按位查找
int GetElem(SqList L,int i)
{
    if(i<=L.length)
        return L.data[i-1];
    else
        return 0;
}
//插入
int ListInsert(SqList *L,int i,ElemType e)
{
    if(i<1||i>L->length+1)
        return 0;
    if(L->length>=MAX)
        return 0;
    for(int j=L->length;j>=i-1;j--)
        L->data[j]=L->data[j-1];
    L->data[i-1]=e;
    L->length++;
    return 1;
}
//删除
int ListDelete(SqList *L,int i,ElemType *e)
{
    if(i<1||i>L->length)
        return 0;
    if(L->length==0)
        return 0;
    *e=L->data[i-1];
    for(int j=i;j<L->length;j++)
        L->data[j-1]=L->data[j];
    L->length--;
    return 1;
}
//输出
void PrintList(SqList L)
{
    if(L.length!=0)
        for(int j=0;j<L.length;j++)
            printf("%d\n",L.data[j]);
    else
        printf("error!\n");
}
//判空
int Empty(SqList L)
{
    if(L.length==0)
        return 1;
    else
        return 0;
}
//置空
int ClearList(SqList *L)
{
    L->length=0;
    return 0;
}
int main()
{
    SqList L;
    ElemType e;
    int x=0,m=0;
    int i,j=0,k;
    InitList(&L);
    printf("初始化顺序表\n");
    printf("创建顺序表\n");
    printf("请输入需要输入的值的个数:");
    scanf("%d",&j);
    k=CreateList(&L,j);
    if(k!=0)
    {
        printf("请输入需要插入的值的个数:");
        scanf("%d",&j);
        if(j>0)
            for(i=0;i<j;i++)
            {
                printf("请输入需要插入的值及其位置:");
                scanf("%d %d",&e,&x);
                k=ListInsert(&L,x,e);
                if(k==0)
                    printf("Insert Error!\n");
                else
                    printf("Insert %d:%d Success.\n",x,e);
            }
        printf("请输入需要删除的值的个数:");
        scanf("%d",&j);
        if(j>0)
            for(i=0;i<j;i++)
            {
                printf("请输入需要删除的值的位置:");
                scanf("%d",&x);
                k=ListDelete(&L,x,&m);
                if(k==0)
                    printf("Delete Error!\n");
                else
                    printf("Delete %d:%d Success.\n",x,m);
            }
        m=Length(L);
        printf("表的长度为%d\n",m);
        printf("输入需要查找的值:");
        scanf("%d",&e);
        i=LocateElem(L,e);
        if(i!=0)
            printf("Find Success.\n");
        else
            printf("Find Error!\n");
        printf("输入需要查找的位:");
        scanf("%d",&e);
        i=GetElem(L,e);
        if(i!=0)
            printf("第%d位的值为%d\n",e,i);
        else
            printf("Find Error!\n");
        printf("输出顺序表中的内容\n");
        PrintList(L);
        k=Empty(L);
        if(k!=0)
            printf("该表为空\n");
        else
            printf("表不为空\n");
        printf("置空顺序表\n");
        ClearList(&L);
        printf("输出顺序表中的内容\n");
        PrintList(L);
        k=Empty(L);
        if(k!=0)
            printf("该表为空\n");
        else
            printf("表不为空\n");
    }
    return 0;
}


举报

相关推荐

0 条评论