利用数据结构c语言创建一个顺序表来实现图书信息的插入删除查找和建立
时间: 2024-10-15 09:16:12 浏览: 29
在C语言中,我们可以使用数组或者结构体结合动态内存分配来实现一个简单的顺序表(如链表)来存储图书信息。这里我们先用一维数组举例,假设每个图书的信息包括书名、作者和ID:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义图书结构体
typedef struct {
char title[50];
char author[50];
int id;
} Book;
// 动态数组作为顺序表
Book* createList(int capacity); // 创建书籍列表函数
void insert(Book** list, int index, const Book& book); // 插入书籍函数
Book* search(Book** list, int id); // 查找书籍函数
void deleteItem(Book** list, int index); // 删除书籍函数
void display(Book* list); // 显示列表内容
// 主函数示例
int main() {
int numBooks = 5; // 初始化书籍数量
Book* bookList = createList(numBooks);
// 插入书籍
Book newBook = {"C Programming", "John Doe", 1};
insert(&bookList, 0, newBook);
// 查找书籍
Book* foundBook = search(&bookList, 1);
if (foundBook) {
printf("Found book with ID %d: %s by %s\n", foundBook->id, foundBook->title, foundBook->author);
} else {
printf("Book not found.\n");
}
// 删除书籍
deleteItem(&bookList, 0); // 删除第一个书籍
// 显示并检查列表
display(bookList);
free(bookList); // 清理内存
return 0;
}
// 其他辅助函数实现省略,这里仅给出核心思路
// 创建书籍列表函数
Book* createList(int capacity) {
Book* list = (Book*)malloc(capacity * sizeof(Book));
return list;
}
// 插入书籍函数
void insert(Book** list, int index, const Book& book) {
if (index >= *list->numItems) {
(*list)->items[*list->numItems] = book;
(*list)->numItems++;
}
else {
memmove(&(*list)->items[index + 1], &(*list)->items[index], (*list)->numItems - index);
(*list)->items[index] = book;
}
}
// 查找书籍函数
Book* search(Book** list, int id) {
for (int i = 0; i < (*list)->numItems; i++) {
if ((*list)->items[i].id == id) {
return &((*list)->items[i]);
}
}
return NULL;
}
// 删除书籍函数
void deleteItem(Book** list, int index) {
if (index < (*list)->numItems) {
memmove(&(*list)->items[index], &(*list)->items[index + 1], (*list)->numItems - index - 1);
(*list)->numItems--;
}
}
// 显示列表内容
void display(Book* list) {
for (int i = 0; i < list->numItems; i++) {
printf("%d. %s by %s\n", list->items[i].id, list->items[i].title, list->items[i].author);
}
}
```
阅读全文