提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
题目:
创建一个书本信息的顺序表,数据有书本序号、书名、价格,以及对顺序表的增删改查的操作。文章来源:https://www.toymoban.com/news/detail-724542.html
一、创建顺序表
typedef struct
{
char no[20];
char name[50];
float price;
} book;
typedef struct {
book *elem; //存储空间的基地址
int length; //当前长度
} SqList;
二、顺序表的初始化+输入
Status InitList(SqList &L) { //算法2.1 顺序表的初始化
//构造一个空的顺序表L
L.elem = new book[MAXSIZE]; //为顺序表分配一个大小为MAXSIZE的数组空间
if (!L.elem)
exit(OVERFLOW); //存储分配失败退出
L.length = 0; //空表长度为0
// int i,n;
// cout<<"请输入n的值:"<<endl;
// cin>>n;
/// cout<<"请输入他们的值:"<<endl;
// cout<<"书号"<<" "<<"书名"<<" "<<"价格"<<endl; //也可在开辟空间里创建输入
/// for(int i;i<n;i++)
// {
// cin>>L.elem[i].name>>L.elem[i].no>>L.elem[i].price ;
// L.length++;
// }
return OK;
}
void show(SqList &L)//输入信息
{
L.length = 0; //空表长度为0
int i,n;
cout<<"请输入n的值:"<<endl;
cin>>n;
cout<<"请输入他们的值:"<<endl;
cout<<"书号"<<" "<<"书名"<<" "<<"价格"<<endl;
for(int i;i<n;i++)
{
cin>>L.elem[i].no>>L.elem[i].name>>L.elem[i].price ;
L.length++;
}
}
三、顺序表的取值
Status GetElem(SqList L, int i, book &e) {//算法2.2 顺序表的取值
if(i<1||i>L.length ) return ERROR;
e=L.elem[i-1] ;
cout<<e.no<<" "<<e.name<<" "<<e.price<<endl;
return OK;
//TODO
}
四、顺序表的查找
int LocateElem(SqList L, book e) { //算法2.3 顺序表的查找
//顺序表的查找
for(int i=0;i<L.length ;i++)
if(!strcmp(L.elem[i].no,e.no))//这里按书号cha no[10],来查找;
//重点,重点,重点。需要用#include<string.h>,strcmp比较两个字符串是否相等,相等则为0;
//如果按照float,int price(非数组)来查找,直接 int LocateElem(SqList L, book e) { //算法2.3 顺序表的查找
//顺序表的查找
// for(int i=0;i<L.length ;i++)
//if(L.elem[i].price==e.price))即可;
return i+1;
return 0;
}
五、顺序表的插入
Status ListInsert(SqList &L, int i, book e) { //算法2.4 顺序表的插入
//在顺序表L中第i个位置之前插入新的元素e
//i值的合法范围是1<=i<=L.length+1
if((i<1)||(i>L.length +1)) 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;
++L.length ;
return OK;
}
六、顺序表的删除
Status ListDelete(SqList &L, int i) { //算法2.5 顺序表的删除
//在顺序表L中删除第i个元素,并用e返回其值
//i值的合法范围是1<=i<=L.length
//TODO
if((i<1)||(i>L.length ))return ERROR;
for(int j=i;j<=L.length -1;j++)
L.elem[j-1]=L.elem [j];
--L.length ;
return OK;
}
七、顺序表的输出
void VisitList(SqList L)//输出所有元素
{
int i;
for(i=0;i<L.length;i++)
cout<<L.elem[i].no<<" "<<L.elem[i].name<<" "<<L.elem[i].price<<endl;
cout<<endl;
}
全部代码:
#include<iostream>
#include<stdlib.h>
#include<fstream>
#include<string>
#include<iomanip>
using namespace std;
#include <string.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。
typedef int ElemType; //ElemType 为可定义的数据类型,此设为int类型
#define MAXSIZE 100 //顺序表可能达到的最大长度
typedef struct
{
char no[20];
char name[50];
float price;
} book;
typedef struct {
book *elem; //存储空间的基地址
int length; //当前长度
} SqList;
Status InitList(SqList &L) { //算法2.1 顺序表的初始化
//构造一个空的顺序表L
L.elem = new book[MAXSIZE]; //为顺序表分配一个大小为MAXSIZE的数组空间
if (!L.elem)
exit(OVERFLOW); //存储分配失败退出
L.length = 0; //空表长度为0
// int i,n;
// cout<<"请输入n的值:"<<endl;
// cin>>n;
/// cout<<"请输入他们的值:"<<endl;
// cout<<"书号"<<" "<<"书名"<<" "<<"价格"<<endl; //也可在开辟空间里创建输入
/// for(int i;i<n;i++)
// {
// cin>>L.elem[i].name>>L.elem[i].no>>L.elem[i].price ;
// L.length++;
// }
return OK;
}
void show(SqList &L)//输入信息
{
L.length = 0; //空表长度为0
int i,n;
cout<<"请输入n的值(数据的个数):"<<endl;
cin>>n;
cout<<"请输入他们的值:"<<endl;
cout<<"书号"<<" "<<"书名"<<" "<<"价格"<<endl;
for(int i;i<n;i++)
{
cin>>L.elem[i].no>>L.elem[i].name>>L.elem[i].price ;
L.length++;
}
}
Status GetElem(SqList L, int i, book &e) {//算法2.2 顺序表的取值
if(i<1||i>L.length ) return ERROR;
e=L.elem[i-1] ;
cout<<e.no<<" "<<e.name<<" "<<e.price<<endl;
return OK;
//TODO
}
int LocateElem(SqList L, book e) { //算法2.3 顺序表的查找
//顺序表的查找
for(int i=0;i<L.length ;i++)
if(!strcmp(L.elem[i].no,e.no))//这里按书号cha no[10],来查找;
//重点,重点,重点。需要用#include<string.h>,strcmp比较两个字符串是否相等,相等则为0;
//如果按照float,int price(非数组)来查找,直接 int LocateElem(SqList L, book e) { //算法2.3 顺序表的查找
//顺序表的查找
// for(int i=0;i<L.length ;i++)
//if(L.elem[i].price==e.price))即可;
return i+1;
return 0;
}
Status ListInsert(SqList &L, int i, book e) { //算法2.4 顺序表的插入
//在顺序表L中第i个位置之前插入新的元素e
//i值的合法范围是1<=i<=L.length+1
if((i<1)||(i>L.length +1)) 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;
++L.length ;
return OK;
}
Status ListDelete(SqList &L, int i) { //算法2.5 顺序表的删除
//在顺序表L中删除第i个元素,并用e返回其值
//i值的合法范围是1<=i<=L.length
//TODO
if((i<1)||(i>L.length ))return ERROR;
for(int j=i;j<=L.length -1;j++)
L.elem[j-1]=L.elem [j];
--L.length ;
return OK;
}
void VisitList(SqList L)//输出所有元素
{
int i;
for(i=0;i<L.length;i++)
cout<<L.elem[i].no<<" "<<L.elem[i].name<<" "<<L.elem[i].price<<endl;
cout<<endl;
}
int main()
{
SqList S;
book e;
InitList(S) ;//建空表
show(S);//输入
cout<<"输出Book的全部数据:"<<endl;
VisitList(S);//输出
cout<<"取值,取值第一个数据的值"<<endl;
GetElem(S,1,e);
cout<<"查找,这里按照书号char no[]来查找:"<<endl;
cin>>e.no;//关键需要给 LocateElem(S,e)中给;
if(LocateElem(S,e)==0)
cout<<"没有找到e.no的数据"<<endl;
else
cout<<"找到e.no了,位置在"<<LocateElem(S,e)<<endl;
cout<<"在第二个位置中插入书号,书名,价格" <<endl;
cin>>e.no>>e.name>>e.price;
ListInsert(S,2,e);
cout<<"插入后的结果为"<<endl;
VisitList(S);//输出
cout<<"删除第二个数据后,结果为"<<endl;
ListDelete(S,2);
VisitList(S);//输出
cout<<"输出数据长度为:";
cout<<S.length;
}
结果:
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了创建一个书本信息的顺序表,数据有书本序号、书名、价格,以及对顺序表的增删改查的操作。文章来源地址https://www.toymoban.com/news/detail-724542.html
到了这里,关于创建一个图书信息管理的顺序表,数据有书本序号、书名、价格,以及对顺序表的增删改查的操作(c++)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!