某学校的图书管理系统中,书本种类信息包括:书号、书名、价格三项属性,且书的种类不超过20。编写c语言代码,用双向循环链表示实现该图书管理系统数据结构的构建,并且至少能够进行初始化、插入,删除,从某一位置正序及倒序输出所有书本信息
时间: 2024-10-23 12:13:57 浏览: 32
在C语言中,我们可以使用双向链表(Doubly Linked List)来实现一个简单的图书管理系统。首先,我们需要定义一个节点结构体,包含书本的基本信息以及指向前后节点的指针。
```c
typedef struct BookNode {
int bookId; // 书号
char title[50]; // 书名
float price; // 价格
struct BookNode* prev; // 前一个节点
struct BookNode* next; // 后一个节点
} BookNode;
// 初始化链表
void initBookList(BookNode** head) {
*head = NULL;
}
// 插入新书
void insertBook(BookNode** head, int bookId, const char* title, float price) {
BookNode* newNode = (BookNode*)malloc(sizeof(BookNode));
newNode->bookId = bookId;
strncpy(newNode->title, title, sizeof(newNode->title) - 1);
newNode->price = price;
newNode->prev = NULL;
newNode->next = *head;
if (*head != NULL) {
(*head)->prev = newNode;
}
*head = newNode;
}
// 删除一本书
void deleteBook(BookNode** head, int bookId) {
BookNode* current = *head;
while (current != NULL && current->bookId != bookId) {
current = current->next;
}
if (current == NULL) return;
if (current->prev != NULL) {
current->prev->next = current->next;
} else {
*head = current->next;
}
if (current->next != NULL) {
current->next->prev = current->prev;
}
free(current);
}
// 正序遍历并输出所有书籍信息
void printBooksInOrder(BookNode* head) {
BookNode* temp = head;
while (temp != NULL) {
printf("书号: %d, 书名: %s, 价格: %.2f\n", temp->bookId, temp->title, temp->price);
temp = temp->next;
}
}
// 反向遍历并输出所有书籍信息
void printBooksReversed(BookNode* head) {
BookNode* temp = head;
while (temp != NULL) {
printf("书号: %d, 书名: %s, 价格: %.2f\n", temp->bookId, temp->title, temp->price);
temp = temp->prev;
}
}
```
阅读全文