Nerede yanlış gittiğimi anlamaya çalışıyorum. Ekleme yöntemim, aynı öğrencinin iki kez eklendiğini algılamıyor. P.s listesi konteynerin başına işaret ediyor.C++ Yöntem mantığı ekle
int add(Student* s)
{
Container *follow = list;
Container *newNode = new Container;
newNode->student = s;
if (list == NULL)
{
newNode->next = NULL;
list = newNode;
//cout << "Student Added!";
return 1;
}
else if (s->getFirstName().compare(list->student->getFirstName()) == 0) //duplication check
{
if (s->getLastName().compare(list->student->getLastName()) == 0) //Same Student
{
free(newNode->student); //Memory Mangment
free(newNode);
// cout << "Student Exist!";
return 0;
}
}
else //adding at the beginning of the list
{
newNode->next = list;
list = newNode;
// cout << "Student Added!";
return 1;
}
Container* temp = list->next;
while (temp != NULL) // inserting inbetween 2 nodes in the list
{
if (s->getFirstName().compare(list->student->getFirstName()) == 0)
{
if (s->getLastName().compare(list->student->getLastName()) == 0) //Same Student
{
free(newNode->student); //Memory Mangment
free(newNode);
// cout << "Student Exist!";
return 0;
}
}
else
{
newNode->next = list;
list = newNode;
// cout << "Student Added!";
return 1;
}
follow = temp;
temp = temp->next;
}
follow->next = newNode; // inserting at the end of the list
return 1;
}
Kodu şu şekilde değiştirdim, ancak hala bir çalışma zamanı hatası alıyorum.
Container* follow = list;
Container* newNode = (Container*) malloc(sizeof(Container));
newNode->student = s;
newNode->next = NULL;
if (list == NULL) // inserting into an empty list
{
list = newNode;
return 1;
}
while (list != NULL)
{
if (search(s) == NULL)
{
newNode->next = list;
list = newNode;
return 1;
}
else if (search(s) != NULL)
{
free(newNode->student); //Memory Mangment
free(newNode);
// cout << "Student Exist!";
return 0;
}
}
Aşağıda bu fonksiyon zaten sizin için uygulanır // arama uygulanmasıdır. İstenen öğrenci listede yoksa, NULL döndürülür.
Student* search(Student* s)
{
Container *traverser = list;
while (traverser != NULL)
{
if (traverser->student->getFirstName() == s->getFirstName() && traverser->student->getLastName() == s->getLastName())
return traverser->student;
traverser = traverser->next;
}
return NULL;
}
Re '_CONTAINER_H_', altçizgi ile başlayan ve büyük harfle başlayan tanımlayıcıların uygulamaya ayrıldığını lütfen unutmayın. –
"Karşılaştır" yerine, std :: string 'için' == 'kullanabilirsiniz. –
C++ 11 yerine, 'NULL' yerine, genel tercih 'nullptr 'kullanımı içindir:' null 'olsaydı bile niçin kullanıldığını, niçin bu olduğunu açıkladı. –