数据结构(顺序表建立)

初学数据结构,记录一下课后作业.

分成了两个源文件。

#include<stdio.h>
#include "sqlist.cpp"
int main()
{
    int choice;
    SqList *L=NULL;
    PrintCommand();
    while(1)
    {
        printf("\n请输入下一个操作:\n");
        scanf("%d",&choice);
        Choice(L,choice);
    }
}
//
// Created by Snow on 2023/2/28.
//
#include <cstdlib>
#define MaxSize 20
int flat=0;
typedef char ElemType;
//定义结构体
typedef struct
{
    ElemType data[MaxSize];
    int length;
}SqList;
//打印菜单
void PrintCommand()
{
    printf("         欢迎使用顺序表操作系统\n\n");
    printf("1.初始化顺序表L            2.依次插入a,b,c,d,e元素\n");
    printf("3.输出顺序表L              4.输出顺序表L的长度\n");
    printf("5.判断顺序表L是否为空      6.输出顺序表L的第3个元素\n");
    printf("7.输出元素a的位置          8.在第4个元素的位置上插入f元素\n");
    printf("9.输出顺序表L              10.删除顺序表L的第三个元素\n");
    printf("11.输出顺序表L             12.释放顺序表L\n");
    printf("0.结束程序\n");
}
bool InitList(SqList *&L)
{
    if(L!=NULL)
    {
        printf("顺序表已存在!\n");
        return false;
    }
    L=(SqList *) malloc(sizeof(SqList));
    if(L==NULL)
    {
        printf("顺序表初始化失败!\n");
        return false;
    }
    L->length=0;
    flat=1;
    return true;
}
bool CreatList(SqList *&L)
{
    if(L==NULL)
    {
        printf("请先初始化表!\n");
        return false;
    }
    int i,k=0;
    for(i=97;i<=101;i++)
    {
        L->data[k]=(char)i;
        k++;
    }
    L->length=k;
    return true;
}
bool DispList(SqList *L)
{
    int i;
    if(L==NULL)
    {
        printf("顺序表不存在!\n");
        return false;
    }
    if(L->length==0)
    {
        printf("空表\n");
    }
    for(i=0;i<L->length;i++)
        printf("%c ",L->data[i]);
    printf("\n");
    return true;
}
int ListLength(SqList *L)
{
    return L->length;
}
bool DestroyList(SqList *&L)
{
    if(L==NULL)
    {
        printf("顺序表不存在!\n");
        return false;
    }
    free(L);
    flat=0;
    return true;
}
bool ListEmpty(SqList *L)
{
    if(L==NULL)
    {
        printf("顺序表不存在!\n");
        return false;
    }
    if(L->length==0)printf("空表\n");
    else printf("该顺序表已存储数据!\n");
    return true;
}
bool GetELem(SqList *L,int i,ElemType &e)
{
    if(L==NULL)
    {
        printf("顺序表不存在!\n");
        return false;
    }
    if(i<1||i>L->length)
    {
        printf("参数错误!\n");
        return false;
    }
    e=L->data[i-1];
    return true;
}
bool LocateElem(SqList *L,ElemType e)
{
    int i;
    if(L==NULL)
    {
        printf("顺序表不存在!\n");
        return false;
    }
    for(i=0;i<L->length;i++)
        if(L->data[i]==e)printf("元素%c所在的位置为顺序表中第%d个位置\n",e,i+1);
    if(i>L->length)printf("该顺序表中没有此元素!\n");
    return true;
}
bool ListInsert(SqList *&L,int i,ElemType e)
{
    int j;
    if(L==NULL)
    {
        printf("顺序表不存在!\n");
        return false;
    }
    if(i<1||i>L->length+1||L->length==MaxSize)
        return false;
    i--;
    for(j=L->length;j>i;j--)
        L->data[j]=L->data[j-1];
    L->data[i]=e;
    L->length++;
    return true;
}
bool ListDelete(SqList *&L,int i,ElemType &e)
{
    int j;
    if(L==NULL)
    {
        printf("顺序表不存在!\n");
        return false;
    }
    if(i<1||i>L->length)
        return false;
    i--;
    e=L->data[i];
    for(j=i;j<L->length-1;j++)
        L->data[j]=L->data[j+1];
    L->length--;
    return true;

}
void Choice(SqList *&L, int i)
{
    bool OK;
    ElemType e;
    switch(i)
    {
        case 1:
            OK=InitList(L);
            if(OK==true)printf("初始化表操作成功!\n");
            else printf("初始化表操作失败!\n");
            break;
        case 2:
            OK= CreatList(L);
            if(OK==true)printf("插入a,b,c,d,e元素成功\n");
            else printf("操作失败!\n");
            break;
        case 3:
            OK=DispList(L);
            if(OK==true)printf("输出表操作成功!\n");
            else printf("操作失败!\n");
            break;
        case 4:
            printf("顺序表长度为:%d\n", ListLength(L));
            break;
        case 5:
            OK= ListEmpty(L);
            if(OK==true)printf("判断空表操作成功!\n");
            else printf("操作失败!\n");
            break;
        case 6:
            OK= GetELem(L,3,e);
            if(OK)printf("顺序表第3个元素为:%c\n",e);
            else printf("操作失败!\n");
            break;
        case 7:
            OK= LocateElem(L,'a');
            if(OK)printf("查找操作成功!\n");
            else printf("操作失败!\n");
            break;
        case 8:
            OK= ListInsert(L,4,'f');
            if(OK)printf("插入操作成功!\n");
            else printf("操作失败!\n");
            break;
        case 9:
            OK=DispList(L);
            if(OK)printf("输出表操作成功!\n");
            else printf("操作失败!\n");
            break;
        case 10:
            OK= ListDelete(L,3,e);
            if(OK)printf("删除操作成功,被删除的元素为%c\n",e);
            else printf("操作失败!\n");
            break;
        case 11:
            OK=DispList(L);
            if(OK)printf("输出表操作成功!\n");
            else printf("操作失败!\n");
            break;
        case 12:
            OK= DestroyList(L);
            if(OK==true)printf("顺序表销毁操作成功!\n");
            else printf("销毁操作失败!\n");
            break;
        case 0:
            if(flat==1)
            {
                printf("您忘记销毁顺序表了,已自动帮你销毁。\n");
                free(L);
            }
            printf("感谢使用!下次再见!\n");
            system("pause");
            exit(0);
        default:printf("指令错误,请再尝试一次\n");
    }
}

使用了GBK编码格式,如要运行请将自己的编码格式改为GBK。

posted @ 2023-03-02 12:16  SnowDreamXUE  阅读(14)  评论(0编辑  收藏  举报  来源