数据结构(严蔚敏版)---------------------------------------顺序表的基本操作及其应用【详解】

将来的你一定会感谢现在努力学习的你!

经过一个下午的折腾和鼓捣,终于成功的将数据结构(严蔚敏版)的顺序表给调试好了,我测了大量的数据都通过!如有不合适的地方还请路过的大佬能指示一下,我在此先深深表示一下感谢!

不废话了,我这个代码写的非常详细!大家看代码学习,不懂的可以留言!

最后希望大家都能写好基本的数据结构!

代码如下:

#include<iostream>
#include<algorithm>
#include<string.h>
#define MAXSIZE 100 //顺序表可能达到的最大长度
using namespace std;
typedef int Status;
typedef int ElemType;
typedef struct{
    ElemType *elem; //存储空间的基地址,类似数组的首地址
    int length; //当前长度
}SqList; //顺序表的结构类型为SqList
//顺序表的初始化
Status InitList(SqList &L)
{
    //构造一个空的顺序表L
    L.elem = new ElemType[MAXSIZE]; //为顺序表分配一个大小为MAXSIZE的数组空间
    if(!L.elem)
        return 0; //存储分配失败退出
    L.length = 0; //空表长度为0
    return 1;
}
//顺序表的创建
Status CreateList(SqList &L)
{
    printf("请您输入想要创建的顺序表的元素的个数:\n");
    scanf("%d",&L.length);
    printf("请输入你想要创建的顺序表:\n");
    for(int i=0;i<L.length;i++)
        scanf("%d",&L.elem[i]);
}
//顺序表的取值
Status GetElem(SqList L,int i,ElemType &e)
{
    if(i<1 || i>L.length) //判断i值是否合理,如果不合理,返回0
        return 0;
    e = L.elem[i-1]; //elem[i-1]单元存储第i个数据元素
    return 1;
}
//顺序表的查找
Status LocateElem(SqList L,ElemType e)
{
    //在顺序表L中查找值为e的数据元素,返回其序号
    for(int i=0;i<L.length;i++)
    {
        if(L.elem[i] == e)
            return i+1; //查找成功,返回序号i+1
    }
    return 0;
}
//顺序表的插入
Status ListInsert(SqList &L,int i,ElemType e)
{
    //在顺序表L中第i个位置插入新的元素e,i值的合法范围是1<=i<=L.length+1
    if((i<1) || (i>L.length+1))
        return 0; //i值不合法
    if(L.length == MAXSIZE)
        return 0; //当前的存储空间已经满了
    for(int j=L.length-1;j>=i-1;j--)
        L.elem[j+1] = L.elem[j]; //插入位置及其之后的元素后移
    L.elem[i-1] = e; //将新的元素e放入第i个位置
    L.length++; //表长加1
    return 1;
}
//顺序表的删除
Status ListDelete(SqList &L,int i)
{
    //在顺序表L中删除第i个元素,i值的合法范围是1<=i<=L.length
    if((i<1) || (i>L.length))
        return 0; //i值不合法
    for(int j=i;j<=L.length-1;j++)
        L.elem[j-1] = L.elem[j]; //被删除元素之后的元素前移
    L.length--; //表长减1
    return 1;
}
int main()
{
    int m,n;
    SqList L;
    InitList(L);
    CreateList(L);
    printf("请输入你要取值的位置和一个数:\n");
    scanf("%d%d",&m,&n);
    GetElem(L,m,n);
    if(GetElem(L,m,n))
    {
        printf("该位置的值已经被取出,取出的值是:\n");
        printf("%d\n",n);
    }
    else
    {
        printf("取值位置输入有错误,拜拜!\n");
    }
    printf("请输入你要查找的值:\n");
    scanf("%d",&m);
    LocateElem(L,m);
    if(LocateElem(L,m))
    {
        printf("你想要查找的值在线性表的位置如下:\n");
        printf("%d\n",LocateElem(L,m));
    }
    else
    {
        printf("你输入的值在线性表中没有!\n");
    }
    printf("请输入你要插入的位置和元素的值:\n");
    scanf("%d%d",&m,&n);
    ListInsert(L,m,n);
    if(ListInsert(L,m,n))
        printf("插入成功!\n");
    else
        printf("插入失败!\n");
    //下面注释掉的是为了判断执行上述插入之后取值是否仍能正常运行
    /*scanf("%d%d",&m,&n);
    GetElem(L,m,n);
    printf("%d\n",n);*/
    printf("请输入你想要在顺序表中删除的第i个位置:\n");
    scanf("%d",&n);
    ListDelete(L,n);
    if(ListDelete(L,n))
    {
        printf("成功删除!\n");
    }
    else
        printf("没有成功删除!\n");
    //下面的是为了判断执行上述删除之后取值是否仍能正常运行
    printf("请输入你要取值的位置和一个数:\n");
    scanf("%d%d",&m,&n);
    GetElem(L,m,n);
    if(GetElem(L,m,n))
    {
        printf("该位置的值已经被取出,取出的值是:\n");
        printf("%d\n",n);
    }
    else
    {
        printf("取值位置输入有错误,拜拜!\n");
    }
    printf("表的最终长度是%d\n",L.length); //最后输出一下线性表的长度
    return 0;
}

运行结果:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值