ZBLOG

使用单链表的其他方法修改此代码:#ifndef NULL #define NULL 0 #endif #include #include #include using namespace std; struct LNode { //存储数据 int month; int day; string name; double price; LNode* next;//后继指针 LNode() {}; LNode(int a,...

下面是使用双向链表的修改代码:

”`cpp #ifndef NULL #define NULL 0 #endif

#include #include #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);
      else
          str.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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=9587

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?