数据结构----------------顺序表的基本操作

#include<stdio.h>
#define MaxSize 10
typedef int ElemType;

//定义一个顺序表
typedef struct
{
    /* data */
    ElemType data[MaxSize];
    int length;
}SqList;

//初始化顺序表
void InitList(SqList *L)
{
    L->length = 0;
}

//创建顺序表,为其中添加元素
void CreateList(SqList *L,int n)
{
    for(int i=0;i<n;i++)
        scanf("%d",&L->data[i]);
    L->length = n;
}


//输出顺序表
void DispList(SqList *L)
{
    for(int i=0;i<L->length;i++)
        printf("a[%d]=%d\n",i,L->data[i]);
}


//在位序i处插入元素e-------------在下标为i-1的位置插入e
int ListInsert(SqList *L,int i,int e)
{
    if (i<1 || i > L->length+1)  //插入位置非法
        return -1;
    if (L->length >= MaxSize)    //顺序表已满
        return -1;
    for(int j=L->length;j>=i;j--)
        L->data[j] = L->data[j-1];    //将i以及之后的元素全部后移一位
    L->data[i-1] = e;
    L->length++;
    return 1;      //插入成功
}


//删除位序为i的元素----------删除下标为i-e的元素
int DeleteItem(SqList *L,int i, int *e)
{
    if (i<1 || i>L->length)     //删除位置非法
        return -1;
    if (L->length==0)           //顺序表为空表
        return -1;
    *e = L->data[i-1];
    for(int j=i;j<L->length;j++)
        L->data[j-1] = L->data[j];
    L->length--;
    return 1;
}

//修改位序为i的元素----------修改下标为i-1的元素值
int ChangeItem(SqList *L,int i,int e)
{
    
    L->data[i-1] = e;
    return 1;
}


//按位序查找--------查找下标为i-1的元素
int SearchByLocate(SqList *L,int i,int *e)
{
    if (i<1 || i>L->length)     //位置非法
        return -1;
    if (L->length==0)           //顺序表为空
        return -1;
    *e = L->data[i-1];
    return 1;
}


//按值查找---------查找元素值为e的元素下标
int SearchByValue(SqList *L,int e)
{
    if(L->length==0)    //顺序表为空表
        return -1;
    for (int i = 0; i < L->length; i++)
    {
        if (L->data[i]==e)
            return i+1;
    }
    return -1;
}



int main()
{
    SqList L;
    InitList(&L);
    int a = 0;
    printf("你想用几个值创建顺序表");
    scanf("%d",&a);
    CreateList(&L,a);
    printf("初始顺序表为:\n");
    DispList(&L);
    printf("\n");

    ListInsert(&L,3,13);
    printf("插入元素之后的顺序表为:\n");
    DispList(&L);
    printf("\n");

    int e =-1;
    int flag=0;
    flag = DeleteItem(&L,3,&e);
    if (flag==1)
    {
        printf("删除成功!\n");
    }else{   
        printf("删除失败!\n");
    }
    printf("删除元素之后的顺序表为:\n");
    DispList(&L);
    printf("\n");

    printf("修改元素之后的顺序表为:\n");
    ChangeItem(&L,3,666);
    DispList(&L);
    printf("\n");

    int flag2 = 0;
    int e2 = -1;
    flag2 = SearchByLocate(&L,3,&e2);
    if (flag2==1){
        printf("查找成功,该位置元素值为:%d",e2);
    }else{
        printf("查找失败");
    }
    printf("\n");


    int num = -1;     //用于接收按值查找元素位序
    num = SearchByValue(&L,666);
    if (num==-1)
    {
        printf("顺序表中没有此元素!");
    }else{
        printf("该元素在顺序表中是第%d个元素",num);
    }
    
}

运行结果如下图:

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值