定义一个包含图书信息(书号、书名、价格)的带头结点的单链表,读入相应的图书数据来完成图书信息表的创建,并实现图书信息表的输出、查找、删除等基本操作
时间: 2023-04-08 15:03:05 浏览: 374
图书管理信息系统的设计与实现数据结构课程设计报告
5星 · 资源好评率100%
好的,这是一个关于数据结构的问题。可以通过定义一个结构体来表示图书信息,然后创建一个带头结点的单链表来存储这些信息。读入数据后,可以通过遍历链表来输出、查找和删除图书信息。具体实现可以参考以下代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义图书信息结构体
typedef struct Book {
char id[20]; // 书号
char name[50]; // 书名
float price; // 价格
struct Book *next; // 指向下一本书的指针
} Book;
// 创建带头结点的单链表
Book *createList() {
Book *head = (Book *)malloc(sizeof(Book));
head->next = NULL;
return head;
}
// 添加图书信息到链表尾部
void addBook(Book *head, char *id, char *name, float price) {
Book *p = head;
while (p->next != NULL) {
p = p->next;
}
Book *book = (Book *)malloc(sizeof(Book));
strcpy(book->id, id);
strcpy(book->name, name);
book->price = price;
book->next = NULL;
p->next = book;
}
// 输出图书信息表
void printList(Book *head) {
Book *p = head->next;
while (p != NULL) {
printf("%s\t%s\t%.2f\n", p->id, p->name, p->price);
p = p->next;
}
}
// 查找图书信息
Book *findBook(Book *head, char *id) {
Book *p = head->next;
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
return p;
}
p = p->next;
}
return NULL;
}
// 删除图书信息
void deleteBook(Book *head, char *id) {
Book *p = head;
while (p->next != NULL) {
if (strcmp(p->next->id, id) == 0) {
Book *temp = p->next;
p->next = temp->next;
free(temp);
return;
}
p = p->next;
}
}
int main() {
Book *head = createList();
addBook(head, "001", "C语言程序设计", 29.9);
addBook(head, "002", "数据结构与算法", 49.9);
addBook(head, "003", "计算机组成原理", 59.9);
printf("图书信息表:\n");
printList(head);
printf("查找图书信息:\n");
Book *book = findBook(head, "002");
if (book != NULL) {
printf("%s\t%s\t%.2f\n", book->id, book->name, book->price);
} else {
printf("未找到该图书信息!\n");
}
printf("删除图书信息:\n");
deleteBook(head, "003");
printList(head);
return 0;
}
```
希望这个回答能够帮到你!
阅读全文