定义一个包含图书信息(书号,书名,价格)的顺序表能够建立、 输入 、取值 、查找、插入 、删除、输出
时间: 2023-08-15 08:03:59 浏览: 695
数据结构实验1必做部分OJ版-配套实验
好的,我可以帮您解答这个问题。
首先,我们可以定义一个结构体来表示一本书的信息,包括书号、书名和价格:
```c
typedef struct {
int id; // 书号
char name[100]; // 书名
float price; // 价格
} Book;
```
接着,我们可以定义一个顺序表结构体来存储图书信息:
```c
typedef struct {
Book* data; // 存储书籍信息的数组
int length; // 顺序表长度
int capacity; // 顺序表容量
} SeqList;
```
其中,`data` 是一个指向 `Book` 结构体数组的指针,`length` 表示当前顺序表中元素的个数,`capacity` 表示当前顺序表的容量。
下面,我们可以实现一些常用的操作。
1. 建立顺序表
```c
void createSeqList(SeqList* L, int n) {
L->data = (Book*)malloc(n * sizeof(Book)); // 分配数组空间
L->length = n;
L->capacity = n;
for (int i = 0; i < n; i++) {
printf("请输入第%d本书的信息:\n", i + 1);
printf("书号:");
scanf("%d", &(L->data[i].id));
printf("书名:");
scanf("%s", L->data[i].name);
printf("价格:");
scanf("%f", &(L->data[i].price));
}
}
```
2. 输入顺序表
```c
void inputSeqList(SeqList* L) {
for (int i = 0; i < L->length; i++) {
printf("请输入第%d本书的信息:\n", i + 1);
printf("书号:");
scanf("%d", &(L->data[i].id));
printf("书名:");
scanf("%s", L->data[i].name);
printf("价格:");
scanf("%f", &(L->data[i].price));
}
}
```
3. 取值操作
```c
Book get(SeqList L, int i) {
if (i < 1 || i > L.length) {
printf("取值操作失败,下标越界!\n");
exit(1);
}
return L.data[i - 1];
}
```
4. 查找操作
```c
int search(SeqList L, int id) {
for (int i = 0; i < L.length; i++) {
if (L.data[i].id == id) {
return i + 1; // 返回查找到的位置
}
}
return 0; // 没有找到
}
```
5. 插入操作
```c
void insert(SeqList* L, int i, Book book) {
if (L->length == L->capacity) {
printf("插入操作失败,顺序表已满!\n");
exit(1);
}
if (i < 1 || i > L->length + 1) {
printf("插入操作失败,下标越界!\n");
exit(1);
}
for (int j = L->length; j >= i; j--) {
L->data[j] = L->data[j - 1]; // 将后面的元素依次后移
}
L->data[i - 1] = book; // 插入新元素
L->length++; // 更新顺序表长度
}
```
6. 删除操作
```c
void delete(SeqList* L, int i) {
if (i < 1 || i > L->length) {
printf("删除操作失败,下标越界!\n");
exit(1);
}
for (int j = i; j < L->length; j++) {
L->data[j - 1] = L->data[j]; // 将后面的元素依次前移
}
L->length--; // 更新顺序表长度
}
```
7. 输出顺序表
```c
void printSeqList(SeqList L) {
printf("序号\t书号\t书名\t\t\t价格\n");
for (int i = 1; i <= L.length; i++) {
printf("%d\t%d\t%s\t\t\t%.2f\n", i, L.data[i - 1].id, L.data[i - 1].name, L.data[i - 1].price);
}
}
```
这样,我们就完成了一个包含图书信息的顺序表的实现。您可以根据需要调用各个操作函数来完成您的应用程序。
阅读全文