某学校的图书管理系统中,书本种类信息包括:书号、书名、价格三项属性,且书的种类不超过20。编写c语言代码,分别用顺序储存方式和链式储存方式实现该图书管理系统数据结构的构建,并且至少能够进行初始化、清空、增加
时间: 2024-10-16 08:22:42 浏览: 34
在C语言中,我们可以使用两种不同的数据结构来实现这个图书管理系统的数据结构:顺序存储(数组)和链接存储(链表)。这里我会简单地展示如何用这两种方式创建和操作书籍数据。
**1. 顺序存储 (数组):**
```c
#include <stdio.h>
typedef struct {
int bookID;
char title[50];
float price;
} Book;
#define MAX_BOOKS 20
Book books[MAX_BOOKS]; // 顺序数组用于存储书本信息
// 初始化
void init_books() {
for(int i = 0; i < MAX_BOOKS; i++) {
books[i].bookID = -1;
scanf("%s %f", books[i].title, &books[i].price);
}
}
// 添加新书
void add_book(char* title, float price) {
if(find_empty_slot(MAX_BOOKS)) { // 查找是否有空位置
books[slot_index].bookID = next_book_id++;
strcpy(books[slot_index].title, title);
books[slot_index].price = price;
} else {
printf("No more space for new book.\n");
}
}
// 清空所有书籍
void clear_books() {
for(int i = 0; i < MAX_BOOKS; i++) {
books[i].bookID = -1;
books[i].title[0] = '\0';
books[i].price = 0.0;
}
}
// 查找第一个空位
int find_empty_slot(int size) {
for(int i = 0; i < size; i++) {
if(books[i].bookID == -1) return i;
}
return -1; // 如果全满则返回-1表示找不到空位
}
// 获取当前可用的下一个书ID
int next_book_id = 1;
```
**2. 链式存储 (链表):**
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int bookID;
char title[50];
float price;
struct Node* next;
} BookNode;
// 创建一个新的链表节点
BookNode* create_node(int id, char* title, float price) {
BookNode* newNode = (BookNode*)malloc(sizeof(BookNode));
newNode->bookID = id;
strcpy(newNode->title, title);
newNode->price = price;
newNode->next = NULL;
return newNode;
}
// 主链表
BookNode* head = NULL;
// 初始化链表
void init_books_linked_list() {
head = NULL;
}
// 添加新书到链表
void add_book_linked_list(char* title, float price) {
BookNode* newNode = create_node(next_book_id++, title, price);
newNode->next = head;
head = newNode;
}
// 清空链表
void clear_books_linked_list() {
BookNode* current = head;
while(current != NULL) {
BookNode* temp = current;
current = current->next;
free(temp);
}
head = NULL;
}
// 其他函数类似,但链表版本需要对头节点的操作
```
阅读全文