实验一:顺序线性表的实现

1)实验性质:设计性实验

(2)实验要求:

  1. 编程实现顺序表的以下基本操作:建立顺序表,修改顺序表,插入顺序表,删除顺序表。
  2. 采用顺序表结构编程实现:两个集合的运算:交集/并集/差集。

(3)实验目的

通过该实验,深入理解顺序表的逻辑结构、物理结构等概念,掌握顺序表基本操作的编程实现,注意顺序表插入、删除等操作过程中数据元素的移动现象,培养学生编写程序时,要考虑程序的强壮性,熟练掌握通过函数参数返回函数结果的办法。

(4)实验内容

编程实现顺序表下教材第二章定义的线性表的基本操作,最好用菜单形式对应各个操作,使其编程一个完整的小软件。

(5)参考界面

(6)验收/测试用例

通过菜单调用各个操作,测试点:

  1. 没有初始化前进行其他操作,程序是否能控制住;
  2. 初始化一个顺序表;
  3. 插入数据(位置, 数据),要测插入位置不合法的情况(0,1)、(2,1),正确插入4个数据(1,2)、(1,1)、(3,3);
  4. 显示顺序表中的数据,屏幕输出1, 2, 3;
  5. 判空,屏幕输出顺序表非空;
  6. 顺序表长度,屏幕输出3;
  7. 获取指定位置元素,要测指定位置在【1,3】范围之外的情况和之内的情况;
  8. 定位,输入:4, 输出:不存在,输入2,输出位置为2;
  9. 求直接前驱,要测求第一个元素的前驱、不存在顺序表中的元素的直接前驱,其他元素的直接前驱;
  10. 求直接后继,要测最后一个元素的后继、不存在顺序表中的元素的直接后继,其他元素的直接后继;
  11. 删除,要测位置在【1,3】范围之外的情况和之内的情况;
  12. 清空操作后再测长度;
  13. 销毁顺序表
  14. #include <iostream>
    using namespace std;
    #define maxsize 1000
    typedef struct{
     int *elem;
     int length;
    }SqList;
    string InitList(SqList &L){
        L.elem = new int[maxsize];
        if (!L.elem) return "创建失败,请重新创建!";
        L.length = 0;
        return "创建表 OK";
    }
    void DestroyList(SqList &L){
        if (L.elem != NULL) delete[] L.elem;
        L.length = 0;
        L.elem = NULL;
    }
    void ClearList(SqList &L){
        L.length = 0;
        L.elem = new int[maxsize];
    }
    int GetLength(SqList &L){
        return L.length;
    }
    bool Getresult(SqList &L){
        if(L.length == 0) return false;
        else{
            return true;
        }
    }
    void CheckList(SqList &L,int local){
        if (local>L.length || local <1)
            cout<<"查询位置不存在"<<endl;
        else
            cout<<"你查询位置的内容为"<<L.elem[local-1]<<endl;
    }
    void  CheckListQ(SqList &L,int local){
        if (local>L.length || local <2)
            cout<<"查询位置不存在"<<endl;
        else
            cout<<"你查询前驱的内容为"<<L.elem[local-2]<<endl;
    }
    void  CheckListH(SqList &L,int local){
        if (local>L.length - 1 || local <1)
            cout<<"查询位置不存在"<<endl;
        else
            cout<<"你查询后继的内容为"<<L.elem[local]<<endl;
    }
    bool ListInsert(SqList &L,int a,int b){
        if (a<1||a>L.length+1) return false;
        if (L.length == maxsize) return false;
        for (int j = L.length-1;j>=a-1;j--)
            L.elem[j+1]= L.elem[j];
        L.elem[a-1] = b;
        L.length ++;
        return true;
    }
    bool ListDelete(SqList &L,int local){
        if(local<1 || local > L.length) return false;
        for (int j = local - 1;j < L.length - 1;j++){
            L.elem[j] = L.elem[j+1];
        }
        L.length --;
        return true;
    }
    bool print(SqList &L){
        for(int i = 0 ;i < L.length -1 ;i++){
            cout<<L.elem[i]<<"-->";
        }
        cout<<L.elem[L.length-1]<<endl;
    }
    int main()
    {
        int  number;
        do{
    
        cout<<"1----初始化一个线性表"<<endl;
        cout<<"2----销毁一个线性表"<<endl;
        cout<<"3----清空线性表"<<endl;
        cout<<"4----判断线性表是否为空"<<endl;
        cout<<"5----求线性表长度"<<endl;
        cout<<"6----求线性表指定位置元素"<<endl;
        cout<<"7----求前驱"<<endl;
        cout<<"8----求后继"<<endl;
        cout<<"9----在线性表指定位置插入元素"<<endl;
        cout<<"10----删除线性表指定位置元素"<<endl;
        cout<<"11----显示线性表"<<endl;
        cout<<"         退出,输入一个负数!"<<endl;
        cout<<"请输入一个操作代码:"<<endl;
        cin>>number;
        SqList biao;
    if (number == 1){
            string return_content = InitList(biao);
            cout<<return_content<<endl;
    }
    else if (number == 2) {
        DestroyList(biao);
        cout<<"销毁表成功!!"<<endl;
    }
    else if (number == 3){
        ClearList(biao);
        cout<<"清空表成功!!"<<endl;
    }
    else if (number ==4 ){
        bool result = Getresult(biao);
        if (result) cout<<"该链表不为空"<<endl;
        else{
            cout<<"该链表为空"<<endl;
        }
    }
    else if (number == 5){
        int length = GetLength(biao);
        cout<<"表的长度为:"<<length<<endl;
    }
    else if (number ==6) {
            cout<<"请输入你想查询的位置:"<<endl;
            int local;
            cin>>local;
            CheckList(biao,local);
    }
    
    else if (number ==7) {
            cout<<"请输入你想查询的位置:"<<endl;
            int local;
            cin>>local;
            CheckListQ(biao,local);
    }
    else if (number == 8) {
        cout<<"请输入你想查询的位置:"<<endl;
        int local;
        cin>>local;
        CheckListH(biao,local);
    }
    else if (number ==9){
            cout<<"请输入你插入的位置和内容:"<<endl;
            int a,b;
            cin>>a>>b;
            bool panduan = ListInsert(biao,a,b);
            if (panduan) cout<<"插入成功!!"<<endl;
            else{
            cout<<"插入失败!!!"<<endl;
            }
        }
    else if (number == 10){
        cout<<"请输入你想删除元素的位置: "<<endl;
        int local;
        cin>>local;
        bool panduan = ListDelete(biao,local);
        if(panduan) cout<<"删除成功!!"<<endl;
        else{}
        cout<<"删除失败!!!"<<endl;
    }
    else if (number ==11){
        print(biao);
    }
    else if (number > 11){
        cout<<"你的输入有误,请重新输入……"<<endl;
    }
    cout<<endl;
    cout<<endl;
      }while(number > 0);
      cout<<"成功退出程序。"<<endl;
    }
    
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

How to Learn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值