数据结构基础(三)哈希表的实现

来源:互联网 发布:伏羲距今多少年 知乎 编辑:程序博客网 时间:2024/04/27 17:07
#pragma once#include <iostream>#define N 10using namespace  std;typedef struct node{int val;struct node *next;}Node;void freeLinklist(Node *&head);void freeLinklist(Node *&head){if (head==NULL){return;}if (head->next==NULL){delete head;head=NULL;return;}Node *pre=head;Node *temp=head->next;while(temp->next!=NULL){delete pre;pre=temp;temp=temp->next;}delete pre;head=NULL;};class Hash{public:Hash(){for(int i=0;i<N;i++){hashTable[i]=NULL;}};~Hash(){for (int i=0;i<N;i++){freeLinklist(hashTable[i]);}};Node* find(int val){int index=val%N;Node *head=hashTable[index];if (head!=NULL){while(head->next!=NULL&&head->val!=val){head=head->next;}if (head->val==val){return head;}return NULL;}return NULL;};Node* insert(int val){int index=val%N;Node *head=hashTable[index];if (head!=NULL){while(head->next!=NULL){head=head->next;}head->next=new Node;head->next->val=val;head->next->next=NULL;return head->next;}head=new Node;head->next=NULL;head->val=val;hashTable[index]=head;return head;};void print(){for (int i=0;i<N;i++){Node *head=hashTable[i];if(head==NULL){cout<<endl;continue;}while(head->next!=NULL){cout<<head->val<<"\t";head=head->next;}cout<<head->val<<endl;cout<<endl;}};bool deleteNode(int val){Node *obj=find(val);if (obj==NULL){return true;}//说明哈希表中有这个节点 Node *head=hashTable[val%N];if (head==obj){hashTable[val%N]=obj->next;delete obj;deleteNode(val);return true;}while(head->next!=obj&&head->next!=NULL){head=head->next;}head->next=obj->next;delete obj;deleteNode(val);return true;}private:Node *hashTable[N];//这是个数组};
这是哈希表的一种简单的基于数组的实现,哈希函数选为取余,对哈希表的操作就变成了对链表的操作
0 0