データ構造の伴対問題

14728 ワード

テーマと考え方
男の人と女の人が複数いますが、男の人と女の人のためにダンスパートナーを選ぶことを要求しています.出力の結果は自分のデザインによって決められています.循環隊列を使っていません.
#include 
using namespace std;
typedef struct{
    string name;
    char sex;
}Person;
typedef struct node{
    Person data;
    struct node *next;
}QNode,*Qptr;
typedef struct {
    Qptr front;
    Qptr rear;
}Linkqueue;
void push(Linkqueue &L,Person e)
{
    QNode *p;
    p = new node;
    p -> data = e;
    p -> next = NULL;
    L.rear -> next = p;
    L.rear = p;
}
void pop(Linkqueue &L)
{
    QNode *p;
    p = L.front -> next;
    L.front -> next = p -> next;
    if(L.rear == p)
        L.rear = L.front;
}
int empty(Linkqueue L)
{
    if(L.front == L.rear)
        return 1 ;
    else
        return 0 ;
}
Person getelem(Linkqueue &L)
{
    return (L.front -> next -> data);
}
void init(Linkqueue &L)
{
    L.front = new node;
    L.front -> next = NULL;
    L.rear = L.front;
}
void match(Linkqueue &M,Linkqueue &F)
{
    int num,n,n1;
    cout << "               :" << endl;
    cin >> n;
    cout << "       n1(        n1           )" << endl;
    cin >> n1;
    for(int i = 1; i <= n1 ; i++)
    {
        num = 1;
        if(i == n1)
        cout << "          :" << endl;
    while(!empty(M) && !empty(F) && num <= n)
    {
        Person P;
        P = getelem(M);
        pop(M);
        push(M,P);
        if(i == n1)
        cout << "  :" << P.name << ' ';
        P = getelem(F);
        pop(F);
        push(F,P);
        if(i == n1)
        cout << "  : " << P.name << endl;
        num ++;
    }
    }
}
int main()
{
    int N;
    Person Per[1001];
    Linkqueue F,M;
    init(F);
    init(M);
    cout << "               :" << endl;
    cin >> N;
    cout << "      N               (xiaoming F   xiaofang M)" << endl;
    for(int i = 1; i <= N ; i++)
    {
        cin >> Per[i].name >> Per[i].sex;
        if(Per[i].sex == 'F')
            push(F,Per[i]);
        else
            push(M,Per[i]);
    }
    match(M,F);
}
}