用C语言的链表完成上面的问题
时间: 2024-10-19 16:11:25 浏览: 20
使用链表实现上述图书信息表的创建和输出问题,可以按照以下步骤进行:
### 数据结构定义
首先定义图书信息结构体 `Book` 和链表节点结构体 `ListNode`。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 50
// 图书信息结构体
typedef struct {
char no[20]; // 图书 ISBN
char name[MAXLEN]; // 图书名字
float price; // 图书价格
} Book;
// 链表节点结构体
typedef struct ListNode {
Book data;
struct ListNode *next;
} ListNode;
// 链表头结点结构体
typedef struct {
ListNode *head;
int length;
} LinkedList;
```
### 创建链表
初始化链表并提供插入函数。
```c
// 初始化链表
void initList(LinkedList *list) {
list->head = NULL;
list->length = 0;
}
// 插入新节点到链表末尾
void insertBook(LinkedList *list, const Book *book) {
ListNode *newNode = (ListNode *)malloc(sizeof(ListNode));
if (newNode == NULL) {
fprintf(stderr, "内存分配失败\n");
exit(EXIT_FAILURE);
}
newNode->data = *book;
newNode->next = NULL;
if (list->head == NULL) {
list->head = newNode;
} else {
ListNode *current = list->head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
list->length++;
}
```
### 输入和处理
读取输入并创建链表。
```c
// 读取输入并创建链表
void createList(LinkedList *list) {
char no[20], name[MAXLEN];
float price;
while (scanf("%s %s %f", no, name, &price) == 3) {
Book book = {no, name, price};
insertBook(list, &book);
}
}
```
### 输出链表
输出链表中的所有图书信息。
```c
// 输出链表中的所有图书信息
void printList(const LinkedList *list) {
printf("%d\n", list->length);
ListNode *current = list->head;
while (current != NULL) {
printf("%s %s %.2f\n", current->data.no, current->data.name, current->data.price);
current = current->next;
}
}
```
### 主函数
整合以上功能,编写主函数。
```c
int main() {
LinkedList list;
initList(&list);
createList(&list);
printList(&list);
return 0;
}
```
### 完整代码
将上述所有部分组合在一起,形成完整的程序。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 50
// 图书信息结构体
typedef struct {
char no[20]; // 图书 ISBN
char name[MAXLEN]; // 图书名字
float price; // 图书价格
} Book;
// 链表节点结构体
typedef struct ListNode {
Book data;
struct ListNode *next;
} ListNode;
// 链表头结点结构体
typedef struct {
ListNode *head;
int length;
} LinkedList;
// 初始化链表
void initList(LinkedList *list) {
list->head = NULL;
list->length = 0;
}
// 插入新节点到链表末尾
void insertBook(LinkedList *list, const Book *book) {
ListNode *newNode = (ListNode *)malloc(sizeof(ListNode));
if (newNode == NULL) {
fprintf(stderr, "内存分配失败\n");
exit(EXIT_FAILURE);
}
newNode->data = *book;
newNode->next = NULL;
if (list->head == NULL) {
list->head = newNode;
} else {
ListNode *current = list->head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
list->length++;
}
// 读取输入并创建链表
void createList(LinkedList *list) {
char no[20], name[MAXLEN];
float price;
while (scanf("%s %s %f", no, name, &price) == 3) {
Book book = {no, name, price};
insertBook(list, &book);
}
}
// 输出链表中的所有图书信息
void printList(const LinkedList *list) {
printf("%d\n", list->length);
ListNode *current = list->head;
while (current != NULL) {
printf("%s %s %.2f\n", current->data.no, current->data.name, current->data.price);
current = current->next;
}
}
int main() {
LinkedList list;
initList(&list);
createList(&list);
printList(&list);
return 0;
}
```
这个程序会读取输入的图书信息,创建一个链表,并输出链表中的所有图书信息。输入以三个连续的 `0` 结束。
阅读全文