如何使用C语言中的栈数据结构来设计和实现一个图书管理系统?(请生成一个完整代码)
时间: 2024-11-25 10:31:31 浏览: 7
图书管理系统(含源代码)c语言 数据结构课程设计报告.docx
5星 · 资源好评率100%
在C语言中,我们可以使用栈来管理图书系统的一些基本操作,比如书籍的添加、删除和查找。这里我们假设每个书籍都有唯一的ID,并且栈将用于存储书籍的ID。以下是一个简单的图书管理系统的设计示例,包括栈的创建、书籍的添加和查找:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义书籍结构体
typedef struct {
char id[50];
char title[100];
} Book;
// 创建栈
typedef struct Stack {
Book* items;
int top; // 栈顶元素的位置
int capacity;
} Stack;
// 初始化栈
void stack_init(Stack* s, int size) {
s->items = (Book*)malloc(size * sizeof(Book));
s->top = -1;
s->capacity = size;
}
// 判断栈是否为空
int is_empty(Stack* s) {
return s->top == -1;
}
// 添加书籍到栈顶
void push(Stack* s, Book book) {
if (s->top + 1 >= s->capacity) {
printf("Stack is full.\n");
return;
}
s->top++;
strcpy(s->items[s->top].id, book.id);
strcpy(s->items[s->top].title, book.title);
}
// 查找书籍
Book* find_by_id(Stack* s, const char* id) {
for (int i = 0; i <= s->top; i++) {
if (!strcmp(s->items[i].id, id)) {
return &s->items[i];
}
}
return NULL; // 如果未找到则返回NULL
}
// 主函数演示栈的操作
int main() {
Stack books_stack;
stack_init(&books_stack, 10); // 初始化一个容量为10的栈
// 添加书籍
Book book1 = {"001", "The Great Gatsby"};
push(&books_stack, book1);
// 查找书籍
Book* found_book = find_by_id(&books_stack, "001");
if (found_book != NULL) {
printf("Found book with ID %s: Title - %s\n", found_book->id, found_book->title);
} else {
printf("Book not found.\n");
}
// 检查并删除书籍(这里仅做演示,实际栈中无法直接删除)
if (!is_empty(&books_stack)) {
printf("Deleting top book (for demonstration only):\n");
Book deleted_book = books_stack.items[books_stack.top];
books_stack.top--;
free(deleted_book.id); // 释放内存
free(deleted_book.title);
}
return 0;
}
```
这个程序实现了栈的基本功能,但是请注意,由于栈是后进先出的数据结构,在实际应用中查找可能会非常慢,不适合用来频繁查找特定的书籍。如果需要高效的搜索功能,可能需要考虑使用其他数据结构,如哈希表或二叉搜索树。
阅读全文