#include <bits/stdc++.h>
using namespace std;
#define OK true
#define ERROR false
#define Status bool
#define ElemType Book
#define MAXSIZE 10000 + 10
typedef struct{
char no[20];
char name[50];
float price;
}Book;
typedef struct{
Book *elem;
int length;
}SqList;
Status InitList(SqList &L){
L.elem = new ElemType[MAXSIZE];
if(!L.elem) exit(OVERFLOW);
L.length = 0;
return OK;
}
Status GetElem(SqList L, int i, ElemType &e){
if(i < 1 || i > L.length) return ERROR;
e = L.elem[i-1];
return OK;
}
Status CompareElem(Book a, Book b){
if(strcmp(a.name, b.name)==0 && strcmp(a.no, b.no) == 0 && a.price == b.price)
return true;
return false;
}
int LocateElem(SqList L, ElemType e){
for(int i = 0; i < L.length; i++)
if(CompareElem(L.elem[i], e)) return i + 1;
return 0;
}
Status ListInsert(SqList &L, int i, ElemType e){
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){
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 ShowList(SqList &L){
for(int i = 0; i < L.length; i++){
printf("编码 : %s 书名 : %s 价格 : %f\n", L.elem[i].no, L.elem[i].name, L.elem[i].price);
}
}
int main(){
SqList L;
InitList(L);
int num;
printf("书籍序号: ");
scanf("%d", &num);
for(int i = 0; i < num; i++){
printf("请输入书籍的编码、名字、价格:\n", i+1);
Book x;
scanf("%s %s %f", x.no, x.name, &x.price);
if(ListInsert(L, i+1, x)) printf("成功输入\n");
else printf("输入失败,请重试\n");
}
ShowList(L);
printf("请输入下一步操作:\n");
printf("0 : 结束程序.\n");
printf("1 : 打印输出书籍信息.\n");
printf("2 : 插入书籍.\n");
printf("3 : 删除书籍.\n");
printf("4 : 输入书籍信息查找书籍.\n");
printf("5 : 输入序号查找书籍信息.\n");
int op;
while(scanf("%d", &op) && op){
if(op == 1) ShowList(L);
else if(op == 2) {
printf("插入位置: \n");
int pos;
scanf("%d", &pos);
printf("插入书籍的编码、名字、价格:\n");
Book x;
scanf("%s %s %f", x.no, x.name, &x.price);
if(ListInsert(L, pos, x)) printf("插入成功\n");
else printf("插入失败\n");
}
else if(op == 3) {
printf("删除位置:\n");
int pos;
scanf("%d", &pos);
if(ListDelete(L, pos)) printf("删除成功\n");
else printf("删除失败\n");
}
else if(op == 4) {
printf("查找信息(编码、名字、价格):\n");
Book x;
scanf("%s %s %f", x.no, x.name, &x.price);
int pos = LocateElem(L, x);
printf("查找书籍的序号是 %d \n", pos);
}
else if(op == 5) {
Book x;
int id;
printf("查找信息(序号):\n");
scanf("%d", &id);
bool flag = GetElem(L, id, x);
if(!flag) printf("该书不存在\n");
else{
printf("书籍的信息是:\n", id);
printf("%s %s %f\n", x.no, x.name, x.price);
}
}
else printf("错误\n\n");
printf("请输入下一步操作\n");
}
return 0;
}
根据P24 声明一个图书结构体,并创建顺序表。录入10本书的信息并输出。2、创建一个顺序表存储整型数据,并分别实现查找、插入、删除。每次操作前后,均需要输出显示。