Создайте односвязный список с этим заголовком и кодом main () в C ++ - PullRequest
0 голосов
/ 02 мая 2020

Я новичок. Недавно я получил задание. Они говорят, что это простой метод. Но я ничего не могу поделать. Вопрос состоит в том, чтобы создать односвязный список, используя эти <head line> и <main>, вы можете написать только часть функции.

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

class phoneData {
public:
    phoneData(string name, string phoneNumber, string address);
    void printPD();
// private:
    string name_;
    string phoneNumber_;
    string address_;
};

class phoneNode {
public:
    phoneNode(phoneData * data, phoneNode * next);
    phoneNode * next_;
    phoneData * data_;
};

class phoneBook {
public:
    phoneBook();
    bool Insert(phoneData * data);
    phoneData * Delete(string name);
    phoneData * Find(string name);
private:
    phoneNode * lst_;
};

и

int main() {
    phoneBook * pb = new phoneBook();
    phoneData * pd  = new phoneData("lalala", "110-2345-6789", "kekeke");
    pb->Insert(pd);
    pd  = new phoneData("dkdkdkk", "541-3076-5432", "sadsad");
    pb->Insert(pd);

    pd = pb->Find("lalala");
    if (pd) pd->printPD();

    pd = pb->Find("dkdkdkk");
    if (pd) pd->printPD();

    pb->Delete("lalala");

}

, поэтому я написал этот код.

phoneData::phoneData(string name, string phonenumber, string address) {

    name_ = name;
    phoneNumber_ = phonenumber;
    address_ = address;
}


phoneBook::phoneBook() {
    lst_ = 0;
}


bool phoneBook::Insert(phoneData *item){


    if (lst_ == 0) {
    lst_ = new phoneNode(item, 0); 
    //return; 
    }

    if (item < lst_->data_) { 
    lst_ = new phoneNode(item, lst_);
    //  return;
    }

    phoneNode* ptr = lst_;
    while (ptr->next_ != 0 && ptr->next_->data_ < item ){
    ptr = ptr->next_;
    }

    ptr->next_ = new phoneNode(item, ptr->next_);  

}

Это не работает, и я не могу перейти к следующей части. Я не знаю, почему они показывают функцию вставки типа bool. Это должно быть нарочно, но я не знаю.

phonedata* phonebook::delete(string key) {

    if (lst_ == 0) //return;
    phonenode* ptr = lst_;
    if (lst_->data_->name_ == key) {
        lst_ = lst_->next_;
        delete ptr;
        //return;

    }

    while (ptr->next_ != 0 && ptr->next_->data_->name_ != key) {  
        phonenode* ptr = ptr->next_;  
    }

    if (ptr->next_ == 0) //return ;
    phonenode* dptr = ptr->next_;
    ptr->next_ = ptr->next_->next_;
    delete dptr; 

}
...