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

#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 

原文地址:https://www.cnblogs.com/smallbrokenchildwen/p/6561794.html