下面是使用双向链表的修改代码:
”`cpp #ifndef NULL #define NULL 0 #endif
#include
using namespace std;
struct LNode {
int month;int day;string name;double price;LNode* prev; // 前驱指针LNode* next; // 后继指针LNode() {};LNode(int a, int b, string c, double d, LNode* p = NULL, LNode* n = NULL): month(a), day(b), name(c), price(d), prev(p), next(n) {};
};
class List { public:
int _size;LNode* head;void init() {head = new LNode();head->prev = NULL;head->next = NULL;_size = 0;}
public:
List() { init(); }~List() {while (head != NULL) {LNode* p = head->next;delete head;head = p;}_size = 0;}
public:
// 头插法void insert(int& a, int& b, string& c, double& d) {_size++;if (head == NULL) {return ;}LNode* p = new LNode(a, b, c, d);if (head->next != NULL) {p->next = head->next;head->next->prev= p;}p ->prev= head ;head -> next=p ;};
//在指定位置插入元素
void insert(int index,int a, int b, string c, double d) {while (index <= 0 || index > _size + 1){return;}_size++;LNode* p = head;for(int i=0; i<index-1; i++){p=p->next;}LNode* tmp = new LNode(a,b,c,d);if(p->next!=NULL){p -> next ->prev=tmp;tmp -> next=p->next;}else{// 尾部插入p->next=tmp;tmp->prev=p;}tmp ->prev=p ;};void print_L() {LNode* p=head -> next ;while (p != NULL) {cout << p->month << " " << p->day << " ";p = p->next;}cout << endl;};int located(int a,int b) {LNode* p = head -> next ;int e = 1 ;if(p == NULL ) return e ;while(p!=NULL){if(a <p -> month ){e++ ;p=p ->next ;if(p==NULL){return e ;}} else if (a>p -> month ){return e ;}else if (a ==p -> month ){if(b<p->day){e++;p=p->next ;if(p==NULL){return e ;}} else if(b>p->day ){return e ;}else if(b==p -> day ){return e ;}}}};
};
int main() {
int m, n;string str;string c;double d;List L1;double ave1 = 0;double ave2 = 0;cin >> m >> n;for (int i = 0; i < m; i++) {cin >> str >> c >> d;int a = stoi(str, 0, 10);if (a >= 10)str.erase(0, 3);elsestr.erase(0, 2);int b = stoi(str, 0, 10);int e = L1.located(a,b) ;L1.insert(e,a,b,c,d) ;}//L1.print_L();double sum1=0 ;int count1=0 ;double sum2=0 ;int count2=0 ;LNode* p=L1.head->next ;for(int i=0;i<m;i++){if(count1>=n){break ;}else{if(p -> name=="keyboard"){sum1+=p ->price ;p=p -> next ;count1++ ;} else if(p-> next !=NULL ) p=p->next ;}}LNode* s=L1.head->next ;
for(int i=0;i;i++){
if(count2>=n){break ;}else{if(s -> name=="mouse"){sum2+=s ->price ;s=s -> next ;count2++ ;}else if(s-> next !=NULL ) s=s->next ;}}cout << fixed << setprecision(1) <<sum1/n<<endl;cout <<fixed << setprecision(1)<<sum2/n<<endl;return 0;
}
”`
内容由零声教学AI助手提供,问题来源于学员提问




