1

リンクされたリストの後ろに要素を追加しようとしています。

要素を追加することができ、最初の試行ですべてが正常に機能しますが、別の要素を追加しようとすると、以前に追加された要素がごみの値になります。

LinkedList::process_example(int choice,LinkedList &set)メインメニューの関数を関数宣言のまったく同じコードに置き換えると、問題は解決します。誰かが私に理由を説明できますか????

#include <iostream>
#include <ctime>
using namespace std;

struct Node;
typedef void* VoidPtr;
typedef Node* NodePtr;
typedef char* ZodiacSign;
const int MAX=12;

struct Node
{
NodePtr next;
VoidPtr data;

};

class LinkedList
{
public:
LinkedList();

//~LinkedList();

void Addelement(VoidPtr);

void printSet();

int compareEqual(VoidPtr,VoidPtr);

void swap(int num,int x,ZodiacSign tempSign [MAX]);

void process_example(int choice);

int check_cardinality();

void Addelementfromback(VoidPtr);



private:

NodePtr head;

ZodiacSign getVP(VoidPtr);


};


int choice=1;
LinkedList set;
do {
    cout<<endl
        <<endl;

    cout<<"Wish to try the following operation?"
        <<endl
        <<"1. Add an element to set"// the function to add to back of linked list
        <<endl
        <<"2. Check an element in set"
        <<endl
        <<"3. check carinality"
        <<endl
        <<"9.  Quit"
        <<endl
        <<endl;

    cout<<"Your choice : ";
    cin>>choice;

    cin.clear();
    cin.ignore(200,'\n');

    set.process_example(choice);

} while (choice !=9);


void LinkedList::process_example(int choice)
{
    switch (choice)
    {
    case 1:
        cout<<endl
            <<endl
            <<"Current S = ";

        this->printSet();

        cout<<"Enter an element :";

        char element [30];

        cin>>element;

        cin.clear();
        cin.ignore(200,'\n');

        this->Addelementfromback(element);

        cout<<endl
            <<endl
            <<"Current S = ";

        this->printSet();

        break;

    case 3:
        cout<<endl
            <<endl;

        cout<<"Current Set S = ";
        set.printSet();

        cout<<endl
            <<"S has ";

        int count=this->check_cardinality();

        cout<<count
            <<" elements";
    }
}

void LinkedList::printSet()
{
    NodePtr temp = head;

    cout<<"{ ";

    while (temp != NULL)
    {
        cout << getVP (temp -> data) << " , ";
        temp = temp -> next;
    }
    cout<<" } ";
    cout << endl;
}

void LinkedList::Addelementfromback(VoidPtr horoscope)
{
    NodePtr temp = head;

    while (temp->next != NULL)
    {
        temp=temp->next;
    }

    NodePtr element = new Node;
    element->data=horoscope;
    element->next=NULL;
    temp->next=element;
}
4

1 に答える 1

2

WhozCraig が既に述べたように、次の行をコンストラクターに追加する必要があります。

Head = NULL;

次に、このようなものを関数 Addelementfromback の先頭に追加できます

If(Head == NULL)
{
     Head = new Node;
     Head->data = horoscope;
     Head->next = NULL;
     return;
}

LinkedList::process_example の次の行も変更する必要があります。

 char elements[30];

 char* elements = new char[30];
于 2013-02-02T15:32:39.190 に答える