一本书的信息包括:书的ID,书名,价格1.请定义结构体类型表示书的信息并建立链表存储 若干本书籍。当输入ID为-1时表示论入结束。 2.输入110查找是否有该的书籍,若有,打印该书的书名和价格。若无,则提示无此书3.删除一个已有书籍ID的相关信息。4.插入一本书(111,"C Programming' 32.5)到链表中,之后打印整个链表,显示该书信息已被正确插入至链表。
时间: 2024-03-13 07:44:56 浏览: 66
以下是结构体类型的定义、链表的创建、查找、删除和插入操作的实现:
```c++
#include <iostream>
#include <string>
using namespace std;
// 书的信息
struct Book {
int id; // 书的ID
string name; // 书名
double price; // 价格
Book* next; // 指向下一本书的指针
};
// 创建链表
Book* createList() {
Book* head = new Book{0, "", 0, nullptr}; // 创建头结点
Book* tail = head; // 尾指针指向头结点
int id;
while (true) {
cout << "请输入书的ID(输入-1结束):";
cin >> id;
if (id == -1) {
break;
}
string name;
double price;
cout << "请输入书名和价格:";
cin >> name >> price;
Book* book = new Book{id, name, price, nullptr};
tail->next = book; // 将新结点连接到链表尾部
tail = book; // 更新尾指针
}
return head;
}
// 查找书籍
void searchBook(Book* head) {
int id;
cout << "请输入书的ID:";
cin >> id;
Book* p = head->next;
while (p != nullptr) {
if (p->id == id) {
cout << "书名:" << p->name << ",价格:" << p->price << endl;
return;
}
p = p->next;
}
cout << "无此书!" << endl;
}
// 删除书籍
void deleteBook(Book* head) {
int id;
cout << "请输入书的ID:";
cin >> id;
Book* p = head->next;
Book* prev = head;
while (p != nullptr) {
if (p->id == id) {
prev->next = p->next; // 将p从链表中删除
delete p; // 释放p的内存空间
cout << "删除成功!" << endl;
return;
}
prev = p;
p = p->next;
}
cout << "无此书!" << endl;
}
// 插入书籍
void insertBook(Book* head, int id, string name, double price) {
Book* p = head->next;
Book* prev = head;
while (p != nullptr) {
if (p->id == id) {
cout << "该书已存在!" << endl;
return;
}
prev = p;
p = p->next;
}
Book* book = new Book{id, name, price, nullptr};
prev->next = book;
cout << "插入成功!" << endl;
}
// 打印书籍信息
void printBooks(Book* head) {
Book* p = head->next;
while (p != nullptr) {
cout << "ID:" << p->id << ",书名:" << p->name << ",价格:" << p->price << endl;
p = p->next;
}
}
int main() {
Book* head = createList();
while (true) {
int choice;
cout << "请选择操作(1.查找书籍 2.删除书籍 3.插入书籍 4.打印书籍信息):";
cin >> choice;
switch (choice) {
case 1:
searchBook(head);
break;
case 2:
deleteBook(head);
break;
case 3:
int id;
string name;
double price;
cout << "请输入书的ID、书名和价格:";
cin >> id >> name >> price;
insertBook(head, id, name, price);
break;
case 4:
printBooks(head);
break;
default:
cout << "无效的选择!" << endl;
break;
}
}
return 0;
}
```
注意,在插入书籍的函数中,需要先遍历链表,判断该书是否已存在。如果存在,则不能插入;如果不存在,则将新结点插入到链表末尾。最后,可以调用打印书籍信息的函数,查看是否插入成功。
阅读全文