使用列表头实现哈希表链接的C ++程序

哈希表是一种数据结构,用于存储键值对。哈希表使用哈希函数来计算要插入或搜索元素的数组的索引。

这是一个C ++程序,用于实现带有列表头的哈希表链接。

算法

对于插入:

Begin

   Declare function Insert(int k, int v)

      int hash_v = HashFunc(k)

      if (ht[hash_v] == NULL)

         ht[hash_v] = new ListHead(k, v)

      else

         ListHead *en = ht[hash_v]

         while (en->n != NULL)

            en = en->n

         if (en->k == k)

            en->v = v

         else

            en->n= new ListHead(k, v)

End.

对于搜索键值:

Begin

   Decla Function SearchKey(int k)

      int hash_v = HashFunc(k)

      if (ht[hash_v] == NULL)

         return -1

      else

         ListHead *en = ht[hash_v]

         while (en != NULL and en->k != k)

            en= en->n

         if (en== NULL)

            return -1

         else

            return en->v

End

对于删除:

Begin

   Declare Function Remove(int k)

      int hash_v = HashFunc(k)

      if (ht[hash_v] != NULL)

         ListHead *en = ht[hash_v];

         ListHead *p= NULL;

         while (en->n != NULL and en->k != k)

            p = en

            en = en->n

         if (en->k== k)

            if (p == NULL)

               ListHead *n= en->n

               delete en;

               ht[hash_v] = n

            else

               ListHead *n= en->n

               delete en

               p->n = n

End.


范例程式码

#include <iostream>

using namespace std;

const int T_S = 20;

class ListHead {

   public:

      int k, v;

      ListHead *n;

      ListHead(int k, int v) {

         this->k = k;

         this->v = v;

         this->n = NULL;

      }

};

class HashMapTable {

   private:

      ListHead **ht;

   public:

      HashMapTable() {

         ht = new ListHead*[T_S];

         for (int i = 0; i < T_S; i++) {

            ht[i] = NULL;

         }

      }

      int HashFunc(int k){

         return k % T_S;

      }

      void Insert(int k, int v) {

         int hash_v = HashFunc(k);

         if (ht[hash_v] == NULL)

            ht[hash_v] = new ListHead(k, v);

         else {

            ListHead *en = ht[hash_v];

            while (en->n != NULL)

               en = en->n;

            if (en->k == k)

               en->v = v;

            else

               en->n= new ListHead(k, v);

         }

      }

      int SearchKey(int k) {

         int hash_v = HashFunc(k);

         if (ht[hash_v] == NULL)

            return -1;

         else {

            ListHead *en = ht[hash_v];

            while (en != NULL && en->k != k)

               en= en->n;

            if (en == NULL)

               return -1;

            else

               return en->v;

         }

      }

      void Remove(int k) {

         int hash_v = HashFunc(k);

         if (ht[hash_v] != NULL) {

            ListHead *en = ht[hash_v];

            ListHead *p = NULL;

            while (en->n != NULL && en->k != k) {

               p = en;

               en = en->n;

            }

            if (en->k == k) {

               if (p == NULL) {

                  ListHead *n= en->n;

                  delete en;

                  ht[hash_v] = n;

               }

               else {

                  ListHead *n = en->n;

                  delete en;

                  p->n = n;

               }

            }

         }

      }

      ~HashMapTable() {

         delete[] ht;

      }

   }

};

int main() {

   HashMapTable hash;

   int k, v;

   int c;

   while(1) {

      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>>c;

      switch(c) {

         case 1:

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

            cin>>v;

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

            cin>>k;

            hash.Insert(k, v);

         break;

         case 2:

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

            cin>>k;

            if (hash.SearchKey(k) == -1)

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

            else {

               cout<<"Elements at key "<<k<<" : ";

               cout<<hash.SearchKey(k)<<endl;

            }

         break;

         case 3:

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

            cin>>k;

            if (hash.SearchKey(k) == -1)

               cout<<"Key "<<k<<" is empty"<<endl;

            else {

               hash.Remove(k);

               cout<<"Entry Removed"<<endl;

            }

         break;

         case 4:

            exit(1);

         default:

            cout<<"\nEnter correct option\n";

      }

   }

   return 0;

}



输出结果

1.Insert element into the table

2.Search element from the key

3.Delete element at a key

4.Exit

Enter your choice: 1

Enter element to be inserted: 1

Enter key at which element to be inserted: 2

1.Insert element into the table

2.Search element from the key

3.Delete element at a key

4.Exit

Enter your choice: 1

Enter element to be inserted: 10

Enter key at which element to be inserted: 1

1.Insert element into the table

2.Search element from the key

3.Delete element at a key

4.Exit

Enter your choice: 1

Enter element to be inserted: 7

Enter key at which element to be inserted: 6

1.Insert element into the table

2.Search element from the key

3.Delete element at a key

4.Exit

Enter your choice: 1

Enter element to be inserted: 12

Enter key at which element to be inserted: 4

1.Insert element into the table

2.Search element from the key

3.Delete element at a key

4.Exit

Enter your choice: 30

Enter correct option

1.Insert element into the table

2.Search element from the key

3.Delete element at a key

4.Exit

Enter your choice: 1

Enter element to be inserted: 30

Enter key at which element to be inserted: 5

1.Insert element into the table

2.Search element from the key

3.Delete element at a key

4.Exit

Enter your choice: 2

Enter key of the element to be searched: 6

Elements at key 6 : 7

1.Insert element into the table

2.Search element from the key

3.Delete element at a key

4.Exit

Enter your choice: 3

Enter key of the element to be deleted: 1

Entry Removed

1.Insert element into the table

2.Search element from the key

3.Delete element at a key

4.Exit

Enter your choice: 2

Enter key of the element to be searched: 6

Elements at key 6 : 7

1.Insert element into the table

2.Search element from the key

3.Delete element at a key

4.Exit

Enter your choice: 4


以上是 使用列表头实现哈希表链接的C ++程序 的全部内容, 来源链接: utcz.com/z/326547.html

回到顶部