• 顺序表(以书本信息为例)


    #include<iostream>
    #include<fstream>
    #include<string>
    #include<iomanip>

    using namespace std;

    #define OK 1
    #define ERROR 0
    #define OVERFLOW -2
    typedef int Status;//函数值返回类型 其值是函数结果状态代码
    typedef int ElemType;// ElemType为可定义的数据类型,这里设为int类型

    #define MAXSIZE 100 // 顺序表可能达到的最大长度
    struct Book{
       string id;//ISBN
       string name;//书名
       double price;//定价
    };

    typedef struct{
      Book *elem;//存储空间的基地址
      int length;//当前长度
    }SqList;

    //顺序表的初始化
    Status InitList_Sq(SqList &L){
       //构造一个空的顺序表L
       L.elem=new Book[MAXSIZE];
       if(!L.elem)
       return -2;// 存储失败推出
       L.length=0;//空表长度为0
       return OK;
    }
    //顺序表的取值
    Status GetElem(SqList L, int i,Book &e){
       // 判断值是否合理 若不合理 返回error
      if(i<1||i>L.length){
        return ERROR;
      }
      e=L.elem[i-1];//单元存储第i个元素
      return OK;
    }
    // 顺序表的查询
    int LocateElem_Sq(SqList L,double e){

      for(int i=0;i<L.length;i++)
      if(L.elem[i].price=e)
        return i+1;//查找成功 返回序号i+1
      return 0;//查找失败 返回0
    }
    //顺序表的插入
    Status ListInsert_Sq(SqList &L ,int i,Book e){

       if(i<1||i>L.length-1)//插入位置大于合法范围 1-100
        return ERROR;
        if(L.length==MAXSIZE)//当前存储空间已满
            return ERROR;
       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 OK;

    }
    //顺序表的删除
    Status ListDelete_Sq(SqList &L,int i){

      if(i<1||i>L.length)//删除位置不合法
        return ERROR;
      for(int j=i;j<=L.length;j++)//被删除元素之后的元素前移
      L.elem[j-1]=L.elem[j];
      --L.length;
      return OK;
    }

    int main(){

      SqList L;
      int i=0,temp,a,c,choose;
      double price;
      Book e;
      string head_1,head_2,head_3;
      cout<<"1.建立 ";
      cout<<"2.输入 ";
      cout<<"3.取值 ";
      cout<<"4.查找 ";
      cout<<"5.插入 ";
      cout<<"6.删除 ";
      cout<<"7.输出 ";
      cout<<"0.退出 ";

      choose=-1;
      while(choose!=0){
        cout<<"请选择:";
        cin>>choose;
        switch(choose){
    case 1://初始化顺序表
        if(InitList_Sq(L))
            cout<<"成功建立顺序表 ";
        else
            cout<<"顺序表建立失败 ";
        break;
    case 2:{//顺序表数据的读取
        i=0;
        L.elem=new Book[MAXSIZE];
        if(!L.elem)
            return -2;
        L.length=0;
        fstream file;
        file.open("book.txt");
        if(!file){
            cout<<"错误! 未找到文件!"<<endl;
            return ERROR;
        }
        file>>head_1>>head_2>>head_3;
        while(!file.eof()){
            file>>L.elem[i].id>>L.elem[i].name>>L.elem[i].price;
            i++;
        }
        cout<<"输入book.txt信息完毕 ";
        L.length=i;
        file.close();
            }
        break;
        case 3://顺序表的查找
        cout<<"请输入一个书本的位置: ";
        cin>>i;
        temp=GetElem(L,i,e);
        if(temp!=0){
            cout<<"查找成功 ";
            cout<<"第"<<i<<"本图书的信息是: ";
            cout<<left<<setw(15)<<e.id<<" "<<left<<setw(50)
            <<e.name<<" "<<left<<setw(5)<<e.price<<endl<<endl;
        }else
        cout<<"查找失败! 位置超出范围 ";
        break;
        case 4://顺序表的查找
            cin>>price;
            temp=LocateElem_Sq(L,price);
            if(temp!=0){
                cout<<"查找成功";
                cout<<"该价格对应的书名为: "<<L.elem[temp-1].name<<endl<<endl;
            }else cout<<"查找失败! 没有这个价格的数据 ";
            break;
        case 5://顺序表的插入
            cout<<"请输入插入的位置和书本信息: 包括 编号 书名 价格 (用空格隔开)";
            cin>>a;
            cin>>e.id>>e.name>>e.price;
            if(ListInsert_Sq(L,a,e))
                cout<<"输入成功. ";
            else
            cout<<"插入失败 ";
            break;
        case 6:// 顺序表的删除
            cout<<"请输入要删除书脊的位置";
            cin>>c;
            if(ListDelete_Sq(L,c))
                cout<<"删除成功 ";
            else
                cout<<"删除失败 ";
            break;
        case 7://顺序表的输出
            cout<<"当前图书系统信息(顺序表)读出: ";
            for(i=0;i<L.length;i++)
                cout<<left<<setw(15)<<L.elem[i].id<<" "<<left
                <<setw(50)<<L.elem[i].name<<" "<<left
                <<setw(5)<<L.elem[i].price<<endl;
            cout<<endl;
            break;

        }
      }

      return 0;

    }

    顺序表是数据结构的第一关,很好理解 注释里有完整的方法实现和过程

    附带book.txt 文件信息 新建一个book.txt 放在与源码同一个位置就能读取.

    ISBN         书名                定价
    9787302257646  程序设计基础   25
    9787302219972  单片机技术及应用  32
    9787302203513  编译原理   46
    9787811234923  汇编语言程序设计教程  21
    9787512100831  计算机操作系统   17
    9787302265436  计算机导论实验指导  18
    9787302180630  实用数据结构   29
    9787302225065  数据结构(C语言版)  38
    9787302171676  C#面向对象程序设计  39
    9787302250692  C语言程序设计   42
    9787302150664  数据库原理   35
    9787302260806  Java编程与实践   56
    9787302252887  Java程序设计与应用教程  39
    9787302198505  嵌入式操作系统及编程  25
    9787302169666  软件测试   24
    9787811231557  Eclipse基础与应用  35 

  • 相关阅读:
    hadoop的运行模式
    集群之间配置 SSH无密码登录
    NameNode故障处理方法
    HDFS的HA(高可用)
    DataNode的工作机制
    NameNode和SecondaryNameNode的工作机制
    HDFS读写数据流程
    Linux软件包管理
    DNS服务之二:Bind97服务安装配置
    ssl协议、openssl及创建私有CA
  • 原文地址:https://www.cnblogs.com/smallbrokenchildwen/p/6561794.html
Copyright © 2020-2023  润新知