下面是使用单链表实现给定代码的示例:
#include <iostream>
#include <vector>
#include <string>
#include <map>
#include <algorithm>
#include <iomanip>
using namespace std;
struct Record {
int month;
int day;
string product;
double price;
Record* next; // 单链表指针
};
bool compare(Record a, Record b) {
if (a.month == b.month) {
return a.day > b.day;
} else {
return a.month > b.month;
}
}
int main() {
int m, n;
cin >> m >> n;
// 构建单链表
Record* head = nullptr;
for(int i = 0; i < m; i++) {
char slash;
Record* newRecord = new Record();
cin >> newRecord->month >> slash >> newRecord->day >> newRecord->product >> newRecord->price;
newRecord->next = head;
head = newRecord;
}
// 对单链表进行排序
vector<Record> recordsList;
while(head != nullptr){
recordsList.push_back(*head);
Record* temp = head->next;
delete head; // 释放当前节点内存
head = temp; // 移动到下一个节点
}
sort(recordsList.begin(), recordsList.end(), compare);
map<string, vector<double>> productPrices;
for(auto& record : recordsList) {
if(productPrices[record.product].size() < n) {
productPrices[record.product].push_back(record.price);
}
}
for(auto& product : productPrices) {
double sum = 0;
for(auto& price : product.second) {
sum += price;
}
cout << fixed << setprecision(1) << sum / product.second.size() << endl;
}
return 0;
}
请注意,在此示例中,我将原始代码中的vector容器转换为了单链表结构。
内容由零声教学AI助手提供,问题来源于学员提问