c语言基于顺序(链式)存储结构的图书信息表的创建和输出
时间: 2024-11-18 12:19:27 浏览: 75
在C语言中,我们通常使用数组或动态链表来表示基于顺序(链式)存储结构的图书信息表。这里我将简要描述如何创建和输出这样的表。
首先,我们可以使用一个结构体`Book`来表示每本书的信息,包含字段如书名、作者和ISBN等:
```c
typedef struct {
char title[50]; // 书名
char author[50]; // 作者
int isbn; // ISBN号码
} Book;
```
为了存储多本图书,我们可以选择使用数组(如果图书数量已知且固定)或链表(如果需要动态添加或删除图书)。
**静态数组示例(已知数量)**:
```c
#define MAX_BOOKS 10
Book books[MAX_BOOKS];
// 创建书籍信息
void create_books() {
for (int i = 0; i < MAX_BOOKS; i++) {
printf("请输入第 %d 本书的信息(书名,作者,ISBN):\n", i+1);
scanf("%s %s %d", books[i].title, books[i].author, &books[i].isbn);
}
}
// 输出书籍信息
void display_books(Book* books) {
for (int i = 0; i < MAX_BOOKS; i++) {
printf("书名:%s, 作者:%s, ISBN:%d\n", books[i].title, books[i].author, books[i].isbn);
}
}
```
**动态链表示例(动态添加)**:
```c
#include <stdlib.h>
#include <stdio.h>
typedef struct BookNode {
Book book;
struct BookNode *next;
} BookNode;
// 动态创建书籍节点并添加到链表
void add_book(Book* books, BookNode** head) {
BookNode* newNode = (BookNode*)malloc(sizeof(BookNode));
if (!newNode) {
perror("Memory allocation failed");
return;
}
scanf("%s %s %d", &newNode->book.title, &newNode->book.author, &newNode->book.isbn);
newNode->next = *head;
*head = newNode;
}
// 输出链表中的书籍信息
void display_linked_books(BookNode* head) {
while (head != NULL) {
printf("书名:%s, 作者:%s, ISBN:%d\n", head->book.title, head->book.author, head->book.isbn);
head = head->next;
}
}
// 主函数
int main() {
BookNode* head = NULL;
while (1) { /* 添加书籍直到用户退出 */
add_book(&books[0], &head);
printf("\n是否继续添加更多书籍?(y/n): ");
char input;
scanf(" %c", &input);
if (input == 'n') break;
}
display_linked_books(head);
return 0;
}
```
在这两个例子中,用户都可以输入书籍信息,并可以按需操作(例如,在动态链表版本中,用户可以选择是否继续添加)。
阅读全文