数据结构顺序表

#include<stdio.h>
#include<iostream>
#include<cstring>
#include<cmath>
#include<vector>
#include<string>
#include<list>
#include<map>
#include<algorithm>
#include<utility>
#include<iterator>
#include<sstream>
#include<stdlib.h>
#include<fstream>
using namespace std;
#define MAXN 100000
struct book//定义书类
{
string name;
string ibsn;
double price;
};
struct List
{
book *p;
int len;


};
void initlist(List &a)//这里设置max,本来不想的
{
a.p=new book[MAXN];
a.len=0;
}


void input(List &a,book b)
{
a.p[a.len]=b;
a.len++;
}
void outputbook(book a)
{
cout<<a.ibsn<<"     "<<a.name<<"      "<<a.price<<endl;
}
void output(List a)
{
cout<<"ISBN                  书名                定价"<<endl;
for(int i=0;i<a.len;i++)
{
outputbook(a.p[i]);
}
}
void destroyList(List &a)
{
delete []a.p;
a.len=0;
a.p=NULL;
}
void Clearlist(List &a)
{
destroyList(a);
initlist(a);
}
int getlength(List a)
{
return a.len;
}
void search(List a,string b)
{
cout<<"ISBN                  书名                定价"<<endl;
for(int i=0;i<a.len;i++)
{
if(a.p[i].ibsn==b||a.p[i].name==b)
{
outputbook(a.p[i]);
}
}
}
bool cmp(book a,book b)
{
if(a.price<b.price)
return true;
return false;
}
void sort(List &a)
{
for(int i=0;i<a.len-1;i++)
for(int j=0;j<a.len-1-i;j++)
{
if(a.p[j].price>a.p[j+1].price)
{
book temp=a.p[j];
a.p[j]=a.p[j+1];
a.p[j+1]=temp;
}
}
}
void qsort(List *a)
{
sort(a->p,a->p+a->len,cmp);
}
void insert(List &a,int k,book b)
{
if(k<=0||k>a.len+1)
{
cout<<"error"<<endl;
return ;
}
for(int i=a.len;i>k-1;i--)
{
a.p[i]=a.p[i-1];
}
a.p[k-1]=b;
a.len++;
}
void Delete(List &a,int k)
{
if(k<=0||k>a.len)
{
cout<<"error"<<endl;
return;
}
for(int i=k-1;i<a.len-1;i++)
{
a.p[i]=a.p[i+1];
}
book temp;
a.p[a.len-1]=temp;
a.len--;
}
void getelem(List a,int k,book &b)
{
if(k>a.len||k<=0)
{
cout<<"error"<<endl;
return;
}
b=a.p[k-1];
}
void MAX(List a,book &b)
{
for(int i=0;i<a.len;i++)
{
if(b.price<a.p[i].price)
b=a.p[i];
}
}
List Inverse(List a)
{
List b;
initlist(b);
b.len=a.len;
for(int i=0;i<a.len/2+1;i++)
{
b.p[i]=a.p[a.len-i-1];
b.p[a.len-i-1]=a.p[i];
}
return b;
}
int main()
{
freopen("book.txt","r",stdin);
string f[5];
for(int i=0;i<4;i++)
{
cin>>f[i];
}
string temp;
List a;
initlist(a);
while(cin>>temp)
{
book t;
t.ibsn=temp;
cin>>t.name>>t.price;
input(a,t);
}
fclose(stdin);
freopen("CON","r",stdin);//关闭重定向
ifstream in("CON");//重定向
cin.rdbuf(in.rdbuf());//重定向
loop:
cout<<"请输入对应数字进行操作"<<endl<<"1.输出"<<endl<<"2.按书号或书名查找"<<endl<<"3.排序"<<endl<<"4.统计个数"<<endl<<"5.插入元素"<<endl<<"6.删除元素"<<endl<<"7.查找位置元素"<<endl<<"8.查找最高价值的书"<<endl<<"9.反向排序"<<endl;
int caozuo;
cin>>caozuo;
if(caozuo==1)
{
output(a);
}
else if(caozuo==2)
{
cout<<"请输入书号或者书名"<<endl;
cin>>temp;
search(a,temp);
}
else if(caozuo==3)
{
int paixu;
cout<<"用冒泡排序请输入1,快速排序请输入2"<<endl;
cin>>paixu;
if(paixu==1)
sort(a);
else if(paixu==2)
qsort(&a);
output(a);
}
else if(caozuo==4)
{
cout<<getlength(a)<<endl;
}
else if(caozuo==5)
{
book t;
cout<<"请输入想插入元素的书号书名和价格(以空格分开)"<<endl;
cin>>t.ibsn>>t.name>>t.price;
cout<<"请输入想插入的位置"<<endl;
int weizhi;
cin>>weizhi;
insert(a,weizhi,t);
}
else if(caozuo==6)
{
cout<<"请输入删除元素的位置"<<endl;
int weizhi;
cin>>weizhi;
Delete(a,weizhi);
}
else if(caozuo==7)//查找
{
int weizhi;
cout<<"请输入查找的位置"<<endl;
cin>>weizhi;
book b;
getelem(a,weizhi,b);
cout<<"ISBN                  书名                定价"<<endl;
outputbook(b);
}
else if (caozuo==8)//查找max
{
book b;
MAX(a,b);
cout<<"ISBN                  书名                定价"<<endl;
outputbook(b);
}
else if(caozuo==9)//反向排序输入文件
{
List b=Inverse(a);
freopen("bookinverselist.txt","w",stdout);
printf("北京林业大学图书馆计算机类图书采购列表\n");
output(b);
fclose(stdout);
freopen("CON","w",stdout);
}
cout<<"是否继续?继续请输入1,结束请输入2"<<endl;
int power;
cin>>power;
if(power==1)
goto loop;
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值