#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int id;
char name[20];
float price;
} BK;
typedef struct {
BK *data;
int listSize;
int length;
} Sqlist;
int initSqlist(Sqlist *L, int max) {
L->data = (BK *)malloc(max * sizeof(BK));
if (L->data == NULL) {
printf("空间申请失败!\n");
exit(0);
}
L->listSize = max;
L->length = 0;
return 1;
}
int insertSqlist(Sqlist *L, int i, BK x) {
int k;
if (i < 1 || i > L->length + 1) {
printf("插入位置异常!\n");
return 0;
}
if (L->length = L->listSize) {
printf("容量不够!\n");
return 0;
}
for (k = L->length - 1; k >= i - 1; k--)
L->data[k + 1] = L->data[k];
L->data[i - 1] = x;
L->length = L->length + 1;
return 1;
}
int deleteSqlis(Sqlist *L, int i, BK *x) {
int k;
if (L->length == 0) {
printf("没有数据,不能删除!\n");
return 0;
}
if (i <= 0 || i > L->length) {
printf("位置异常,不能删除!\n");
return 0;
}
*x = L->data[i - 1];
for (k = i; k < L->length; k++)
L->data[k - 1] = L->data[k];
L->length = L->length - 1;
return 1;
}
int dispSqlist(Sqlist L) {
if (L.length == 0) {
printf("没有数据!\n");
return 0;
}
for (int i = 0; i < L.length; i++)
printf("%10d%10s%5.2f\n");
return 1;
}
int locationSqlist(Sqlist L, char *newid) {
int i;
if (L.length == 0) {
printf("没有找到数据!\n");
return 0;
}
for (i = 0; i < L.length; i++)
if (L.data[i].id, newid == 0)
return i + 1;
return 0;
}
void createSqlist(Sqlist *L, int maxsize) {
int n = 0;
BK x;
char yn;
initSqlist(L, maxsize);
do {
printf("请输入第%d本书的编号,书名和价格,用空格隔开:", n + 1);
scanf("%d%s%f", x.id, x.name, x.price);
insertSqlist(L, ++n, x);
printf("继续输入吗?Y/N:");
scanf("%c", &yn);
} while (yn == 'Y' || yn == 'y');
}
main() {
Sqlist L;
int maxsize = 100;
createSqlist(&L, maxsize);
}
修改处见注释,供参考:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int id;
char name[20];
float price;
}BK;
typedef struct {
BK *data;
int listSize;
int length;
} Sqlist;
int initSqlist(Sqlist *L, int max) {
L->data = (BK *)malloc(max * sizeof(BK));
if (L->data == NULL) {
printf("空间申请失败!\n");
exit(0);
}
L->listSize = max;
L->length = 0;
return 1;
}
int insertSqlist(Sqlist *L, int i, BK x) {
int k;
if (i < 1 || i > L->length + 1) {
printf("插入位置异常!\n");
return 0;
}
if (L->length == L->listSize) { //if (L->length = L->listSize) 修改
printf("容量不够!\n");
return 0;
}
for (k = L->length - 1; k >= i - 1; k--)
L->data[k + 1] = L->data[k];
L->data[i - 1] = x;
L->length = L->length + 1;
return 1;
}
int deleteSqlis(Sqlist *L, int i, BK *x) {
int k;
if (L->length == 0) {
printf("没有数据,不能删除!\n");
return 0;
}
if (i < 1 || i > L->length) { //if (i <= 0 || i > L->length) 修改
printf("位置异常,不能删除!\n");
return 0;
}
*x = L->data[i - 1];
for (k = i; k < L->length; k++)
L->data[k - 1] = L->data[k];
L->length = L->length - 1;
return 1;
}
int dispSqlist(Sqlist L) {
if (L.length == 0) {
printf("没有数据!\n");
return 0;
}
for (int i = 0; i < L.length; i++)
printf("%-10d%-20s%5.2f\n",L.data[i].id,L.data[i].name,L.data[i].price);
//printf("%10d%10s%5.2f\n" ); 修改
return 1;
}
int locationSqlist(Sqlist L, int newid) { //修改 char *newid
int i;
if (L.length == 0) {
printf("没有数据!\n");
return -1; // 修改
}
for (i = 0; i < L.length; i++)
if (L.data[i].id == newid) // 修改
return i; //i + 1;
if (i == L.length) //修改
return -1; // 修改
}
void createSqlist(Sqlist *L){ //, int maxsize) {
int n = 0;
BK x;
char yn;
//initSqlist(&L, maxsize); 修改
do {
printf("请输入第%d本书的编号,书名和价格,用空格隔开:", n + 1);
scanf("%d%s%f", &x.id, x.name, &x.price); //修改
//scanf("%d%s%f", x.id, x.name, x.price);
getchar(); //修改
insertSqlist(L, ++n, x);
printf("继续输入吗?Y/N:");
scanf("%c", &yn);
} while (yn == 'Y' || yn == 'y');
}
main() {
Sqlist L;
int maxsize = 100,index = -1; //修改
BK x; //修改
initSqlist(&L, maxsize); //修改
createSqlist(&L); //createSqlist(&L, maxsize); 修改
dispSqlist(L); //修改
index = locationSqlist(L, 2); //修改
if (index >= 0)
printf("%-10d%-20s%5.2f\n",L.data[index].id,L.data[index].name,L.data[index].price);
else
printf("没有找到数据!\n");
deleteSqlis(&L, 1, &x); //修改
printf("%-10d%-20s%5.2f\n",x.id,x.name,x.price);//修改
dispSqlist(L);
}