void printList(struct Node* headNode) { struct Node* pMove = headNode->next; printf("书名\t价格\t作者\t数量\n"); while(pMove != NULL) { printf("%s\t%.1f\t%s\t%d\n",pMove->data.name,pMove->data.price,pMove->data.author,pMove->data.num); pMove = pMove->next; } }
时间: 2024-02-09 16:07:41 浏览: 91
这段代码是用来实现一个链表的遍历,打印出链表中每个节点的数据信息。其中,struct Node 是链表的节点结构体,包含了一个 data 成员,存储了每个节点的数据信息,以及一个 next 成员,指向下一个节点的指针。headNode 是链表的头节点指针,指向第一个节点。
函数的主要逻辑是通过一个指针 pMove 不断地遍历链表,直到遍历到链表的末尾,即 pMove 指向 NULL。每次遍历到一个节点,就打印出该节点存储的数据信息,然后将 pMove 指向下一个节点,继续遍历。最终,整个链表的数据信息都被打印出来了。
注意,函数中的 printf 语句使用了格式化输出,%s 表示输出一个字符串,%.1f 表示输出一个浮点数并保留一位小数,%d 表示输出一个整数。
相关问题
1.(40分)输出最贵的书籍信息:结构体类型定义如下: struct stu{ char name[20]; float price; struct stu *next; }; 要求: (1)编写自定义函数创建链表,输入书名和价格。输入Y继续创建,输入其他字符结束创建。 (2)编写自定义函数输出最贵的书籍信息。(3)编写自定义函数释放链表内存。 **输入提示:"请输入书名 价格:\n”(循环)**输入格式:“%s%f” **是否继续创建的提示:"是否继续输入,按Y键继续输入,其他键 就结束.\n" CH输出提示“result“输出格式“%s%.2f””
以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stu {
char name[20];
float price;
struct stu* next;
};
// 创建链表
struct stu* create_list() {
struct stu* head = NULL;
struct stu* tail = NULL;
char choice;
do {
printf("请输入书名 价格:\n");
struct stu* node = (struct stu*)malloc(sizeof(struct stu));
scanf("%s%f", node->name, &node->price);
node->next = NULL;
if (head == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
printf("是否继续输入,按Y键继续输入,其他键就结束.\n");
getchar();
choice = getchar();
} while (choice == 'Y' || choice == 'y');
return head;
}
// 输出最贵的书籍信息
void print_max(struct stu* head) {
struct stu* p = head;
struct stu* max_book = head;
while (p != NULL) {
if (p->price > max_book->price) {
max_book = p;
}
p = p->next;
}
printf("result:%s %.2f\n", max_book->name, max_book->price);
}
// 释放链表内存
void free_list(struct stu* head) {
struct stu* p = head;
while (p != NULL) {
struct stu* temp = p;
p = p->next;
free(temp);
}
}
int main() {
struct stu* head = create_list();
print_max(head);
free_list(head);
return 0;
}
```
运行效果如下:
```
请输入书名 价格:
C语言程序设计 60.5
是否继续输入,按Y键继续输入,其他键就结束.
y
请输入书名 价格:
Java编程思想 88.9
是否继续输入,按Y键继续输入,其他键就结束.
y
请输入书名 价格:
Python基础教程 75.2
是否继续输入,按Y键继续输入,其他键就结束.
n
result:Java编程思想 88.90
```
定义一个包含图书信息(书号、书名、价格)的链表,读入相应的图书数据来完成图书信息表的创建,然后将读入的图书逆序存储,逐行输出逆序存储后每本图书的信息。
好的,我会尽力回答你的问题。
首先,我们可以定义一个结构体来存储每本书的信息,如下所示:
```c
struct Book {
int id; // 书号
char name[50]; // 书名
float price; // 价格
};
```
然后,我们可以定义一个链表节点结构体来存储每个图书的信息和指向下一个节点的指针,如下所示:
```c
struct ListNode {
struct Book book; // 图书信息
struct ListNode* next; // 指向下一个节点的指针
};
```
接下来,我们可以定义一个函数来读入每本书的信息并创建链表,如下所示:
```c
struct ListNode* createList()
{
struct ListNode* head = NULL; // 链表的头节点
struct ListNode* tail = NULL; // 链表的尾节点
int id;
char name[50];
float price;
// 读入每本书的信息
while (scanf("%d %s %f", &id, name, &price) == 3) {
// 创建新的节点
struct ListNode* node = (struct ListNode*)malloc(sizeof(struct ListNode));
node->book.id = id;
strcpy(node->book.name, name);
node->book.price = price;
node->next = NULL;
// 将新节点插入链表尾部
if (tail == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
return head;
}
```
接着,我们可以定义一个函数来将链表逆序存储,如下所示:
```c
struct ListNode* reverseList(struct ListNode* head)
{
struct ListNode* prev = NULL;
struct ListNode* curr = head;
while (curr != NULL) {
struct ListNode* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
```
最后,我们可以定义一个函数来逐行输出逆序存储后每本图书的信息,如下所示:
```c
void printList(struct ListNode* head)
{
struct ListNode* curr = head;
while (curr != NULL) {
printf("%d %s %.2f\n", curr->book.id, curr->book.name, curr->book.price);
curr = curr->next;
}
}
```
完整的代码如下所示:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Book {
int id; // 书号
char name[50]; // 书名
float price; // 价格
};
struct ListNode {
struct Book book; // 图书信息
struct ListNode* next; // 指向下一个节点的指针
};
struct ListNode* createList()
{
struct ListNode* head = NULL; // 链表的头节点
struct ListNode* tail = NULL; // 链表的尾节点
int id;
char name[50];
float price;
// 读入每本书的信息
while (scanf("%d %s %f", &id, name, &price) == 3) {
// 创建新的节点
struct ListNode* node = (struct ListNode*)malloc(sizeof(struct ListNode));
node->book.id = id;
strcpy(node->book.name, name);
node->book.price = price;
node->next = NULL;
// 将新节点插入链表尾部
if (tail == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
return head;
}
struct ListNode* reverseList(struct ListNode* head)
{
struct ListNode* prev = NULL;
struct ListNode* curr = head;
while (curr != NULL) {
struct ListNode* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
void printList(struct ListNode* head)
{
struct ListNode* curr = head;
while (curr != NULL) {
printf("%d %s %.2f\n", curr->book.id, curr->book.name, curr->book.price);
curr = curr->next;
}
}
int main()
{
struct ListNode* head = createList();
head = reverseList(head);
printList(head);
return 0;
}
```
希望这个回答能够帮助到你!如果你还有其他问题,可以继续问我。
阅读全文