数据结构顺序表功能的实现

#include <stdio.h>
#define MaxSize 10


typedef struct  //定义
{
    int data[MaxSize];
    int length;
}SqList;

void InitList(SqList * L) //初始化
{
    int i;
    for (i = 0; i < MaxSize; i++)
    {
        L->data[i] = 0;
    }
    L->length = 0;
}
void ListInput(SqList* L, int i, int n) //第一次输入  i为输入的数 n为下标
{
    if (n < L->length)
    {
        printf("此位置有数,重新输入....\n");
    }
    else {
        L->data[n] = i;
        L->length++;
    }
}
void ListInsert(SqList* L, int n1, int n2) //n1为下标 n2为输入的数
{
    int len = L->length;
    if (len == MaxSize)
        printf("此表已满\n");
    else if (n1 >= 0 && n1 <= len)
    {
        int j;
        for (j = len; j > n1; j--)
        {
            L->data[j] = L->data[j - 1];
        }
        L->data[n1] = n2;
        L->length++;
    }
    else
    {
        printf("输入错误\n");
    }
}

void DeleteList(SqList* L, int d) //删除
{
    int i;
    if (d < 0 || d >= L->length)
    {
        printf("输入不合法\n");
        return;
    }
    for (i = d; i < L->length-1; i++)    //后面一个覆盖前面一个
    {
        L->data[i] = L->data[i+1];
    }
    L->data[i] = 0; //最后一个改成0
    L->length--;
    printf("删除成功!\n");
}
void GetElem(SqList L, int n)
{
    if (n > 0 && n <= MaxSize) {
        printf("第%d位是%d\n", n, L.data[n - 1]);
    }
    else {
        printf("输入不合法\n");
        return;
    }
}
void LocateElem(SqList L, int n)
{
    int i = 0;
    int j = 0;
    for (i = 0; i < L.length; i++)
    {
        if (L.data[i] == n)
        {
            printf("%d在第%d位\n", n, i + 1);
            j++;
        }
        
    }
    if (j == 0)
        printf("没有找到\n");
}


int main()
{
    SqList L;
    int i = 0;
    int num1, num2 = 0; //输入
    int del; //删除
    InitList(&L);//初始化

    printf("请输入你要输入几个数:\n");//第一次输入
    int shu;
    scanf("%d", &shu);
    if (shu > 0 && shu <= MaxSize)
    {
        for (i = 0; i < shu; i++)
        {
            scanf("%d", &num1);
            ListInput(&L, num1, num2);
            num2++;
        }
    }
    else {
        printf("输入不合法\n");
        return 0;
    }


    printf("请输入你要在第几个下标插入的什么数:\n"); //插入
    int num3, num4;
    scanf("%d", &num3);
    scanf("%d", &num4);
    ListInsert(&L, num3, num4); //num3为下标 num4为输入的数


    while (1)
    {
        printf("是否要删除表:1 删除  0 不删除\n"); //删除
        scanf("%d", &del);
        if (del == 1)
        {
            int d;
            printf("请输入你要删除表的下标\n");
            scanf("%d", &d);
            DeleteList(&L, d);
        }
        else {
            break;
        }
    }

    printf("是否需要按位查找 1需要  0不需要\n"); //按位查找
    int num5;
    scanf("%d", &num5);
    if (num5 == 1)
    {
        int num6;
        printf("请输入要查找的位数:");
        scanf("%d", &num6);
        GetElem(L, num6);
    }


    printf("是否需要按值查找 1需要  0不需要\n"); //按值查找
    int num7;
    scanf("%d", &num7);
    if (num7 == 1)
    {
        printf("请输入你要查找的值:\n");
        int num8;
        scanf("%d", &num8);
        LocateElem(L, num8);
    }

        for (i = 0; i < MaxSize; i++)
    {
        printf("%d ", L.data[i]);
    }

    return 0;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值