C++ Program to Implement Hash Tables chaining with Singly Linked Lists

Now, I’m going to present the article with the topic “C++ Program to Implement Hash Tables chaining with Singly Linked Lists” for you. Can I start the article presentation? Come on! Let’s go.

C++ Program to Implement Hash Tables chaining with Singly Linked Lists

C++ Program to Implement Hash Tables chaining with Singly Linked Lists

#include<iostream>

    #include<cstdlib>

    #include<string>

    #include<cstdio>

    using namespace std;

    const int TABLE_SIZE = 128;

    /* HashNode Class Declaration     */

    class HashNode

    {

        public:

       .    int key;

    	int value;

    	HashNode* next;

            HashNode(int key, int value)

            {

                this->key = key;

    	    this->value = value;

    	    this->next = NULL;

            }

    };

    /* HashMap Class Declaration     */

    class HashMap

    {

        private:

            HashNode** htable;

        public:

            HashMap()

            {

                htable = new HashNode*[TABLE_SIZE];

                for (int i = 0; i < TABLE_SIZE; i++)

                    htable[i] = NULL;

            }

            ~HashMap()

            {

                for (int i = 0; i < TABLE_SIZE; ++i)

    	    {

                    HashNode* entry = htable[i];

                    while (entry != NULL)

    	        {

                        HashNode* prev = entry;

                        entry = entry->next;

                        delete prev;

                    }

                }

                delete[] htable;

            }

            /* Hash Function             */

            int HashFunc(int key)

            {

                return key % TABLE_SIZE;

            }

            /* Insert Element at a key             */

            void Insert(int key, int value)

            {

                int hash_val = HashFunc(key);

                HashNode* prev = NULL;

                HashNode* entry = htable[hash_val];

                while (entry != NULL)

                {

                    prev = entry;

                    entry = entry->next;

                }

                if (entry == NULL)

                {

                    entry = new HashNode(key, value);

                    if (prev == NULL)

    	        {

                        htable[hash_val] = entry;

                    }

    	        else

    	        {

                        prev->next = entry;

                    }

                }

                else

                {

                    entry->value = value;

                }

            }

            /* Remove Element at a key             */

            void Remove(int key)

            {

                int hash_val = HashFunc(key);

                HashNode* entry = htable[hash_val];

                HashNode* prev = NULL;

                if (entry == NULL || entry->key != key)

                {

                	cout<<"No Element found at key "<<key<<endl;

                    return;

                }

                while (entry->next != NULL)

    	    {

                    prev = entry;

                    entry = entry->next;

                }

                if (prev != NULL)

                {

                    prev->next = entry->next;

                }

                delete entry;

                cout<<"Element Deleted"<<endl;

            }

            /* Search Element at a key             */

            int Search(int key)

            {

                bool flag = false;

                int hash_val = HashFunc(key);

                HashNode* entry = htable[hash_val];

                while (entry != NULL)

    	    {

                    if (entry->key == key)

    	        {

                        cout<<entry->value<<" ";

                        flag = true;

                    }

                    entry = entry->next;

                }

                if (!flag)

                    return -1;

            }

    };

    /* Main Contains Menu     */

    int main()

    {

        HashMap hash;

        int key, value;

        int choice;

        while (1)

        {

            cout<<"n----------------------"<<endl;

            cout<<"Operations on Hash Table"<<endl;

            cout<<"n----------------------"<<endl;

            cout<<"1.Insert element into the table"<<endl;

            cout<<"2.Search element from the key"<<endl;

            cout<<"3.Delete element at a key"<<endl;

            cout<<"4.Exit"<<endl;

            cout<<"Enter your choice: ";

            cin>>choice;

            switch(choice)

            {

            case 1:

                cout<<"Enter element to be inserted: ";

                cin>>value;

                cout<<"Enter key at which element to be inserted: ";

                cin>>key;

                hash.Insert(key, value);

                break;

            case 2:

                cout<<"Enter key of the element to be searched: ";

                cin>>key;

                cout<<"Element at key "<<key<<" : ";

                if (hash.Search(key) == -1)

                {

    	        cout<<"No element found at key "<<key<<endl;

    	        continue;

    	    }

                break;

            case 3:

                cout<<"Enter key of the element to be deleted: ";

                cin>>key;

                hash.Remove(key);

                break;

            case 4:

                exit(1);

            default:

               cout<<"nEnter correct optionn";

           }

        }

        return 0;

    }

Final Words

I believe this report about C++ Program to Implement Hash Tables chaining with Singly Linked Lists will beneficial to you. Is this program useful for you? then give your powerful feedback about it. Do share this knowledge with other C/C++ developers

Share on:

Hi, I'm Ranjith a full-time Blogger, YouTuber, Affiliate Marketer, & founder of Coding Diksha. Here, I post about programming to help developers.

Leave a Comment