0

私の「voidunion」関数では、「AUB」がvoid関数内にないため、ユーザーがそれぞれ入力したリンクリスト「A」と「B」の両方からデータを挿入する方法がわかりません。私は入れたでしょう:

AUB.insert

しかし、私は確信が持てませんでした。助言がありますか?

#include "stdafx.h"
#include <iostream>

using namespace std;

class Sets
{
private:struct NODE
        {
            int info;
            NODE *next;
        };
        NODE *list;
public:Sets()
       {
           list=NULL;
       }
       void Insert(int x)
       {
           NODE *p=list, *q=list, *r;
           //create a new node
           r = new (NODE);
           r->info = x;
           r->next = NULL;
           //find the insertion place
           while(p != NULL && p->info < x)
           {
               q=p;
               p=p->next;
           }
           if(p==list)//x is the first info
           {
               list=r;
               r->next=p;
           }
           else if(p==NULL)//x is the last info
           {
               q->next=r;
           }
           else //x is neither forst nor last info
           {
               r->next=p;
               q->next=r;
           }
       }
        void display()
        {
            NODE *p=list;
            while(p != NULL)
            {
                cout << p->info << "-->";
                p=p->next;
            }
            cout << "NULL\n";
        }
        void Union(Sets setA,Sets setB)
        {
            NODE *p=setA.list, *q=setB.list;
            while(p != NULL && q != NULL)
            {
                if(p->info > q-> info)
                {
                    (q->info)
                    q=q->next;
                }
                else if(p->info == q->info)
                {
                    insert(p->info)
                    p=p->next;
                    q=q->next;
                }
                else//P->info < q->info
                {
                    insert(p->info);
                    p=p->next;
                }
            }
            while(p !=NULL)
            {
                insert(p->info);
                p=p->next;
            }
            while(q != NULL)
            {
                insert(q->info);
                q=q->next;
            }
        }
};


int main()
{   
    //create a set of integers
    int x;
    Sets A, B, setAUB;
    cout << "Enter data for setA:\n";
    cout << "Enter a group of positive integer numbers with -1 at the end end: ";
    cin >> x;
    while(x != -1)
    {
        A.Insert(x);
        cin >> x;
    };
    //display setA
    cout << endl << "setA=";
    A.display();

    cout << "Enter data for setB:\n";
    cout << "Enter a group of positive integer numbers with -1 at the end end: ";
    cin >> x;
    while(x != -1)
    {
        B.Insert(x);
        cin >> x;
    };
    //display setB
    cout << endl << "setB=";
    B.display();

    setAUB.Union(A, B);
    //display setAUB
    cout << endl << "setAUB=";
    setAUB.display();

    system ("pause");

    //terminate program
    return 0;
}; 
4

1 に答える 1

0

あなたはそれを定義します:void Union(Sets setA,Sets setB)

何してるの?両方とも値で渡され、戻り値はvoid-結果はどこに行きますか?

(関数this内の)現在のオブジェクトはその和集合になりますか?Unionもしそうなら、すでにそこにあるデータはどうなりますか?あなたはそれを削除していないので、基本的に2つではなく3つのセットをマージしています...

2つのパラメーターを受け取り、2つのパラメーターをマージする新しいリストを返す静的 merge関数を作成することをお勧めします。

mergeそれ以外の場合は、 1つのパラメーターのみを受け取る通常の関数を作成し、それを現在のオブジェクトにマージします。

ちなみに、Setsそれが明らかにソートされたリンクリストであるのに、なぜですか?

于 2012-04-04T09:39:14.260 に答える