定义一个包含图书信息(书号、书名、价格)的链表,读入相应的图书数据来完成图书信息表的创建,然后统计图书表中的图书个数,同时逐行输出每本图书的信息。
时间: 2023-05-31 18:18:43 浏览: 1738
### 回答1:
可以定义一个Book结构体,包含书号、书名、价格三个属性,然后用链表来存储每本图书的信息。
读入图书数据时,可以用循环读入每本图书的信息,然后将其添加到链表中。
统计图书个数时,可以遍历链表,每遍历一个节点就将计数器加1。
逐行输出每本图书的信息时,也可以遍历链表,每遍历一个节点就输出该节点对应的图书信息。可以使用printf函数来格式化输出,例如:
printf("书号:%d,书名:%s,价格:%f\n", book->id, book->name, book->price);
其中book是指向当前节点的指针,id、name、price分别是Book结构体中的三个属性。
### 回答2:
链表是一种数据结构,它将一组数据彼此连接起来,每个数据元素被称为节点,该节点包含数据和指向下一个节点的指针。定义一个包含图书信息的链表,可以考虑设计一个Book类来存储每本图书的信息,包括书号、书名、价格。然后定义一个链表节点类来存储Book对象,并包含一个指向下一个节点的指针。
读入图书数据,可以考虑使用文件输入流来读入每本图书的信息,逐行读取文件中的数据,并利用Book类来创建一个Book对象。然后将该对象包装成链表节点对象,插入到链表中。
创建完链表之后,可以通过遍历链表来统计图书表中的图书个数。考虑将每本书的信息逐行输出并展示在屏幕上,可以使用while循环来遍历链表,并在循环中调用Book类的输出函数,将每本书的信息逐行输出到控制台上。
下面是一个简单的示例代码:
```cpp
#include <iostream>
#include <fstream>
using namespace std;
// 定义Book类
class Book {
public:
int id; // 书号
string name; // 书名
double price; // 价格
void display() {
cout << "id: " << id << endl;
cout << "name: " << name << endl;
cout << "price: " << price << endl;
cout << "------------------------" << endl;
}
};
// 简单链表节点类
class Node {
public:
Book book;
Node* next;
};
int main() {
ifstream in("book.txt"); // 读入book.txt文件
Node head; // 定义头节点
Node* tail = &head; // 定义尾指针
while (!in.eof()) {
// 创建Book对象,并读入数据
Book b;
in >> b.id >> b.name >> b.price;
// 创建链表节点,存储Book对象,并插入链表中
Node* newNode = new Node();
newNode->book = b;
tail->next = newNode;
tail = newNode;
}
in.close(); // 关闭文件流
// 遍历链表,统计图书个数,并逐行输出每本书的信息
int bookNum = 0;
Node* p = head.next;
while (p) {
bookNum++;
p->book.display();
p = p->next;
}
// 输出统计结果
cout << "Total: " << bookNum << " books." << endl;
return 0;
}
```
上述示例代码中,我们读入了一个名为book.txt的文件,该文件中每行分别存储一本书的信息,包括书号、书名和价格。然后创建一个头节点并定义一个尾指针,使用while循环将每本书的信息逐行读入,并依次插入到链表中。
最后,我们遍历整个链表来统计图书个数并逐行输出每本书的信息。在输出每本书的信息时,我们调用了Book类的显示函数来实现逐行展示。最终输出的结果包括每本书的详细信息和图书总数。
### 回答3:
链表是一种数据结构,其中每个节点包含一些数据和指向下一个节点的指针。我们可以定义一个包含图书信息的链表来实现这个问题。每个节点包含三个元素:书号、书名、价格。我们可以用一个结构体来保存这些信息。
struct Book {
int id;
string name;
double price;
Book* next; //指向下一个节点的指针
};
然后我们可以定义一个函数来读入图书数据并创建链表。该函数从文件或标准输入中读入图书数据,然后循环创建节点并添加到链表中。当我们遇到文件或输入的结尾时,函数将返回链表的头指针。
Book* createBookList() {
Book* head = nullptr;
Book* tail = nullptr;
int id;
string name;
double price;
while(cin >> id >> name >> price) { //从标准输入读入数据
Book* book = new Book(); //创建新节点
book->id = id;
book->name = name;
book->price = price;
book->next = nullptr;
if(head == nullptr) { //链表为空,将该节点设置为头节点
head = book;
tail = book;
} else {
tail->next = book; //将节点添加到链表的尾部
tail = book;
}
}
return head;
}
现在我们已经创建了包含图书信息的链表,我们可以遍历链表并统计图书个数,然后逐行输出每本图书的信息。
void printBookList(Book* head) {
int count = 0;
Book* p = head;
while(p != nullptr) { //遍历链表
count++;
cout << "书号:" << p->id << " 书名:" << p->name << " 价格:" << p->price << endl;
p = p->next;
}
cout << "共有 " << count << " 本图书" << endl;
}
最后,我们可以在主函数中调用这两个函数来实现完整的程序。
int main() {
Book* head = createBookList();
printBookList(head);
return 0;
}
这样我们就完成了一个简单的链表应用,实现了读入图书数据并输出统计结果的功能。
阅读全文