beginner
beginner

Reputation: 67

How to generate unique ID in linked list?

I am currently learning how to use linked list in class in my free time. Now I only know how to insert, display and delete. I can delete by using int age; but I think it would be better if I'm able to generate a unique ID that is easier for user to remember(user-friendly), for each data in the linked list so that I could delete by its ID.

I want to know if there is a possible way for me to generate a unique ID in the getInput(); function?

If yes, please give me a hint how to do it. Thanks!

struct list
{
    list *head, *tail;
    list *next;
}
class node
{
    private:
        std::string name; // Name
        int age; // Age in integer
        float height; // In meters

    public:
        node *next; // Pointer to next node
        node *head, *tail;
        node *start_ptr = NULL; // Start Pointer (root)
        node *temp;
        node *temp2;
        node *pNextValue;
        node* prev; // empty header
        node* current;
        void printList();
        void delete_end_node();
        void search();
        void sort_age();
        void deletebyAge();
    node()
        {
            head = NULL;
            tail = NULL;
        }


        void getInput()
        {
            temp = new node;
            cout << "ID: ";
            // This is where I want to generate unique ID
            cout << "Name: ";
            cin >> temp->name;
            cout << "Age: ";
            cin >> temp->age;
            cout << "Height: ";
            cin >> temp->height;

            cout<<"\n";
            temp->next = NULL; // Sets the node to be the last node
            if (start_ptr == NULL)
                start_ptr = temp;
            else
            {
                temp2 = start_ptr; // We know temp2 is not NULL - list not empty!
                while (temp2->next != NULL) // The loop will terminate when temp2
                    temp2 = temp2->next; // points to the last node in the list
                // Move to next link in chain
                temp2->next = temp; // Sets the pointer from that last node to point to the node that has just declared
            }
        } // End of getInput() function
}; //End of class

Upvotes: 2

Views: 1128

Answers (1)

Maxim Egorushkin
Maxim Egorushkin

Reputation: 136246

In C++ the identity of an object is its address. You can use node address as its id, e.g.:

class node
{
    private:
        std::string name; // Name
        int age; // Age in integer
        float height; // In meters

    friend std::ostream& operator<<(std::ostream& s, node& n) {
        return s << "id:" << &n
                 << ' ' << "name:" << n.name
                 << ' ' << "age:" << n.age
                 << ' ' << "height:" << n.height
                 << '\n';
    }
    // the rest of your code...
};

And then print it like:

node n;
std::cout << n;

Alternatively, use a serial counter:

class node
{
private:
    std::string name; // Name
    int age; // Age in integer
    float height; // In meters
    unsigned const id;

    static unsigned object_counter;

public:
    node()
        : id(++object_counter)
    {}

    friend std::ostream& operator<<(std::ostream& s, node& n) {
        return s << "id:" << n.id
                 << ' ' << "name:" << n.name
                 << ' ' << "age:" << n.age
                 << ' ' << "height:" << n.height
                 << '\n';
    }
    // the rest of your code...
};

unsigned node::object_counter = 0;

Upvotes: 1

Related Questions