某学校的图书管理系统中,书本种类信息包括,书号、书名、价格三项属性,目中的种头数不相过20,编写代码希别用顺序存储方式或链式存储方式实现该图书管群系统数据结构的构建,并至少能够进行初始化、清空、增加、删除、查找操作。分别用C语言和C++写出一个完整的程序。
时间: 2024-10-20 13:10:03 浏览: 18
论文研究-WSN中LEACH路由协议簇头数优化研究.pdf
为了在C语言和C++中分别用顺序存储(数组)和链式存储(动态内存管理)的方式实现这个图书管理系统,我会先描述基本的数据结构设计,然后给出相应的操作函数。
**顺序存储 (数组) - C语言**
```c
#include <stdio.h>
#define MAX_BOOKS 20
typedef struct {
int book_id;
char title[50];
float price;
} Book;
// 初始化数组
void init_books(Book books[]) {
for (int i = 0; i < MAX_BOOKS; i++) {
books[i].book_id = -1;
books[i].title[0] = '\0';
books[i].price = 0.0f;
}
}
// 清空数组
void clear_books(Book books[]) {
for (int i = 0; i < MAX_BOOKS; i++) {
books[i].book_id = -1;
books[i].title[0] = '\0';
books[i].price = 0.0f;
}
}
// 增加书籍
void add_book(Book* books, int book_id, char* title, float price) {
if (find_empty_slot(books)) {
books[get_next_free_index(books)].book_id = book_id;
strcpy(books[get_next_free_index(books)].title, title);
books[get_next_free_index(books)].price = price;
} else {
printf("图书已满,无法添加。\n");
}
}
// 删除书籍
void delete_book(Book* books, int book_id) {
for (int i = 0; i < MAX_BOOKS; i++) {
if (books[i].book_id == book_id) {
// Shift elements to fill the gap
for (int j = i; j < MAX_BOOKS - 1; j++)
books[j] = books[j + 1];
books[MAX_BOOKS - 1].book_id = -1;
return;
}
}
printf("找不到指定的书籍。\n");
}
// 查找书籍
Book search_book(Book books[], int book_id) {
for (int i = 0; i < MAX_BOOKS; i++) {
if (books[i].book_id == book_id)
return books[i];
}
return books[0]; // 如果未找到,返回默认空值
}
// 辅助函数:寻找下一个可用位置
int find_empty_slot(Book books[]) {
for (int i = 0; i < MAX_BOOKS; i++)
if (books[i].book_id == -1)
return i;
return -1;
}
// 辅助函数:获取下一个可用索引
int get_next_free_index(Book books[]) {
for (int i = 0; i < MAX_BOOKS; i++)
if (books[i].book_id == -1)
return i;
return MAX_BOOKS; // 如果所有位置都满了,表示无空位
}
// 示例主函数
int main() {
Book books[MAX_BOOKS];
// 初始化
init_books(books);
// 使用上述函数...
}
```
**链式存储 (动态内存) - C++**
```cpp
#include <iostream>
#include <vector>
class Book {
public:
int book_id;
std::string title;
float price;
Book(int id, const std::string& t, float p) : book_id(id), title(t), price(p) {}
};
class Library {
private:
std::vector<Book*> books;
public:
void init() {
books.clear();
}
void clear() {
for (auto& book : books)
delete book;
books.clear();
}
bool add_book(int id, const std::string& title, float price) {
if (books.size() < 20) {
books.push_back(new Book(id, title, price));
return true;
} else {
std::cout << "图书已满,无法添加。\n";
return false;
}
}
void delete_book(int id) {
auto it = std::find_if(books.begin(), books.end(),
[id](const Book* book) { return book->book_id == id; });
if (it != books.end()) {
delete *it;
books.erase(it);
return;
}
std::cout << "找不到指定的书籍。\n";
}
Book* search_book(int id) {
auto it = std::find_if(books.begin(), books.end(),
[id](const Book* book) { return book->book_id == id; });
return it != books.end() ? *it : nullptr;
}
};
int main() {
Library lib;
// 初始化
lib.init();
// 使用上述函数...
}
```
以上两个版本均实现了图书系统的基础功能。注意,在实际应用中,需要处理可能出现的边界情况和异常,如数组溢出、内存泄漏等。同时,查找操作可能会引入线性搜索时间复杂度,如果对性能有较高要求,可以考虑使用哈希表或其他数据结构优化查找过程。
阅读全文