某学校的图书管理系统中,书本种类信息包括:书号、书名、价格三项属性,且书的种类不超过20。编写c语言代码,用双向循环链表示实现该图书管理系统数据结构的构建,并且至少能够进行初始化、插入,删除,从某一位置正序及倒序输出所有书本信息(如4本书情况下,按照2341、2143等顺序输出)
时间: 2024-10-23 16:19:51 浏览: 10
在C语言中,我们可以使用双向链表(doubly linked list)来构建一个简单的图书管理系统。首先,我们定义一个结构体`Book`来存储书的信息:
```c
typedef struct Book {
int book_id; // 书号
char title[50]; // 书名
float price; // 价格
struct Book* prev; // 上一个节点指针
struct Book* next; // 下一个节点指针
} Book;
```
接下来,我们创建函数来实现所需的功能:
1. 初始化空链表:
```c
void init(Book** head) {
*head = NULL;
}
```
2. 插入新书:
```c
void insert(Book** head, const int id, const char* name, float price) {
Book* newNode = (Book*)malloc(sizeof(Book));
newNode->book_id = id;
strcpy(newNode->title, name);
newNode->price = price;
newNode->prev = NULL;
newNode->next = *head;
if (*head != NULL) {
(*head)->prev = newNode;
}
*head = newNode;
}
```
3. 删除指定位置的书:
```c
void delete(Book** head, int position) {
if (*head == NULL || position <= 0) return;
Book* current = *head;
for (int i = 0; i < position - 1 && current != NULL; ++i) {
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);
}
```
4. 正序输出所有书本信息:
```c
void printInOrder(Book* head) {
if (head == NULL) return;
Book* temp = head;
while (temp != NULL) {
printf("%d\t%s\t%f\n", temp->book_id, temp->title, temp->price);
temp = temp->next;
}
}
// 同理,可以添加一个倒序输出的printReverseInOrder()函数
```
阅读全文