typedef int Status;
typedef struct {
char id[20]; // ISBN
char name[100]; // 书名
double price; // 定价
} Book;
typedef struct {
Book *elem; // 存储空间的基地址
int length; // 当前长度
} SqList;
Status InitList_Sq(SqList *L) {
L->elem = (Book *)malloc(MAXSIZE * sizeof(Book));
if (!L->elem)
return OVERFLOW;
L->length = 0;
return OK;
}
Status GetElem(SqList L, int i, Book *e) {
if (i < 1 || i > L.length)
return ERROR;
*e = L.elem[i - 1];
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;
}
return 0;
}
Status ListInsert_Sq(SqList *L, int i, Book e) {
if ((i < 1) || (i > L->length + 1))
return ERROR;
if (L->length == MAXSIZE)
return OVERFLOW;
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_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;
}
void PrintList(SqList L) {
for (int i = 0; i < L.length; i++) {
printf("ID: %s, Name: %s, Price: %.2f\n", L.elem[i].id, L.elem[i].name, L.elem[i].price);
}
}
int main() {
SqList L;
int i = 0, temp, a, c, choose;
double price;
Book e;
printf("1. 建立\n");
printf("2. 输入\n");
printf("3. 取值\n");
printf("4. 查找\n");
printf("5. 插入\n");
printf("6. 删除\n");
printf("7. 输出\n");
printf("0. 退出\n\n");
choose = -1;
while (choose != 0) {
printf("请选择:");
scanf("%d", &choose);
switch (choose) {
case 1:
if (InitList_Sq(&L) == OK)
printf("成功建立顺序表\n\n");
else
printf("顺序表建立失败\n\n");
break;
case 2:
// 输入书籍信息(示例)
printf("输入书籍的ISBN, 书名, 定价:\n");
scanf("%s %s %lf", L.elem[L.length].id, L.elem[L.length].name, &L.elem[L.length].price);
L.length++;
if (L.length > MAXSIZE) {
L.length--; // 超过最大容量,回退
printf("书籍输入失败,顺序表已满\n\n");
} else {
printf("书籍输入成功\n\n");
}
break;
case 3:
printf("输入位置:");
scanf("%d", &i);
if (GetElem(L, i, &e) == OK) {
printf("书籍信息: ID=%s, Name=%s, Price=%.2f\n\n", e.id, e.name, e.price);
} else {
printf("取值失败\n\n");
}
break;
case 4:
printf("输入价格:");
scanf("%lf", &price);
i = LocateElem_Sq(L, price);
if (i) {
printf("找到书籍,位置:%d\n\n", i);
} else {
printf("未找到书籍\n\n");
}
break;
case 5:
printf("输入插入位置和书籍信息(ISBN 书名 价格):\n");
scanf("%d %s %s %lf", &i, e.id, e.name, &e.price);
if (ListInsert_Sq(&L, i, e) == OK) {
printf("插入成功\n\n");
} else {
printf("插入失败\n\n");
}
break;
case 6:
printf("输入删除位置:");
scanf("%d", &i);
if (ListDelete_Sq(&L, i) == OK) {
printf("删除成功\n\n");
} else {
printf("删除失败\n\n");
}
break;
case 7:
PrintList(L);
printf("\n");
break;
}
}
free(L.elem);
return 0;
}