顺序表基本操作的实现 初始化 取值 查找 插入 删除

复习顺序表基本操作功能的实现。

写于此处以便于日后查看,如有错误,欢迎指正。

#include<iostream>

using namespace std;

                                                            //D1:顺序表的存储结构

typedef int ElemType;

#define MAXSIZE 100                 //顺序表可能到达的最大长度

typedef struct

{

    ElemType *elem;                 //储存空间的基地址

    int length;                     //当前长度

}SqList;                            //顺序表的结构类型为SqList    



                                                            //D2:顺序表的初始化

typedef int Status;

#define OVERFLOW 0

#define OK 1

Status InitList(SqList &S)

{

    S.elem=new ElemType[MAXSIZE];   //为顺序表分配一个大小为MAXSIZE的数组空间

    if(!S.elem) exit(OVERFLOW);     //储存失败退出

    S.length=0;                     //空表长度为0

    return OK;

}

                                                            //D3:顺序表的创建

void CreatList(SqList &S,int &n)

{

    int i;

    for(i=0;i<n;i++)

    cin >> S.elem[i];

    S.length=n;

    return;

}

                                                            //D4:顺序表的打印

void ViewList(SqList S)

{

    int i;

    for(i=0;i<S.length;i++)

    {

        cout << S.elem[i] <<" ";

    }

    cout << endl;

    return;

}

                                                            //D5:顺序表的取值

#define ERROR 0;

Status GetElem(SqList S,int i,ElemType &e1)                                                 // & ???

{

    if(i<1 || i>S.length) return ERROR;//判断i值是否合理,若不合理则返回ERROR

    e1=S.elem[i-1];                   //elem[i-1]储存第i个元素

    return OK;

}

                                                            //D6:顺序表的查找

int LocateElem(SqList S,ElemType e2)

{                                   //在顺序表查找值为e的数据元素,返回其符号

    int i;

    for (i=0;i<S.length;i++)

    {

        if(S.elem[i]==e2) return i+1;

    }

    return 0;

}

                                                            //D7:顺序表的插入

Status ListInsert(SqList &S,int i,ElemType e3)

{                                   //在顺序表S的第i个位置插入新的元素e,i值的合法范围为1<=i<=S.length+1

    int j;

    if(i<1 || i>S.length+1)   return ERROR;

    if(S.length==MAXSIZE)     return ERROR;

    for(j=S.length-1;j>=i-1;j--)

        S.elem[j+1]=S.elem[j];

    S.elem[i-1]=e3;

    ++S.length;

    return OK;

}

                                                            //D7:顺序表的删除

Status ListDelete(SqList &S,int i)

{//在顺序表中删除第i个元素,i的合法范围为1<=i<=S.length

    int j;

    if(i<1 || i>S.length) return ERROR;

    for(j=i;j<=S.length-1;j++)

    S.elem[j-1]=S.elem[j];

    --S.length;

    return OK;

}

int main()

{



    SqList A;                       //定义A为SqList类型的变量

    InitList(A);                    //顺序表的初始化

    int m;

    cin >> m;

    CreatList(A,m);

    ViewList(A);



    int i;                      

    ElemType e1;

    cin >> i;

    GetElem(A,i,e1);                //取值

    cout << e1;



    int j;

    ElemType e2;

    cin >> e2;

    j=LocateElem(A,e2);             //查找

    cout << j;



    int k;

    ElemType e3;

    cin >> k >> e3;

    ListInsert(A,k,e3);             //插入

    ViewList(A);



    int l;

    cin >> l;

    ListDelete(A,l);                //删除

    ViewList(A);

}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值