顺序表【数据结构】【c语言严蔚敏版】

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ElemType int
#define MAXSIZE 100
#define Status int
#define ERROR -1
#define OK 1
#define OVERFLOW -2
//创建顺序表数据结构
typedef struct
{
    ElemType* elem;//定义储存空间的基地址为elme
    int length;//定义顺序表长度为length
}SqList;//结构体类型名为SqList

//************基本操作***********
//初始化,构造空顺序表
Status InitList(SqList& L)//SqList &L相当于SqList l;
{
    L.elem = new ElemType[MAXSIZE];//为顺序表动态分配一个大小为MAXSIZE的数组空间
    if (!L.elem) { exit(OVERFLOW); }
    L.length = 0;//初始化长度为0
    return OK;
}
//为顺序表填充初始数据元素
Status CreateList(SqList& L)
{
    int n = 0;
    printf("请输入初始元素个数:\n");
    while (1)
    {
        scanf("%d", &n);//n代表所需元素个数
        if (n > 0 && n < MAXSIZE)//判断空间是否足够
        {
            for (int i = 0; i < n; i++)
            {
                printf("请输入第%d个元素", i + 1);
                scanf("%d", &L.elem[i]);
                L.length++;//完成循环length=n
            }
            break;
        }

        else { printf("输入无效,请重新输入:\n"); }
    }
    return OK;
}

//遍历输出顺序表
void PrintList(SqList& L)
{
    for (int i = 0; i < L.length; i++)
    {
        printf("%d  ", L.elem[i]);
    }
}
//查找e并返回其位置
Status LocateElem(SqList& L)
{
    printf("请输入想查找的值:\n");
    int e = 0;
    scanf("%d", &e);
    for (int i = 0; i < L.length; i++)
    {
        if (L.elem[i] == e) { return i + 1; }
    }
    return 0;//查找失败返回0
}
//插入
Status ListInsert(SqList& L, ElemType e)
{
    int i;
    printf("请输入所需插入位置:\n");
    scanf("%d", &i);
    if (i > 0 && i <= L.length+1)//判断能否
    {
        for (int j = L.length - 1; j >= i; j--)
        {        L.elem[j + 1] = L.elem[j];    }//移动数据
        L.elem[i] = e;
        L.length++;
        return OK;
    }
}


void menu()//菜单
{
    printf("1.赋初始值     2.查找\n3.退出    4.");
}
//程序本体
int main()
{
    int a=0, c=1;
    SqList L;
    InitList(L);
    do
    {
        printf("6");
        menu();
        scanf("%d", &a);
        switch (a)
        {
        case 1:CreateList(L);
            PrintList(L);
            break;
        case 2:LocateElem(L);
            PrintList(L);
            break;
        case 3:c = 0; break;
        }
    } while (c);

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值