#include#include #define M 11 typedef struct node { int pos; struct node* link; struct hashnode* branch; }HashTableNode; typedef struct hashnode { int key; struct hashnode* next; }HashNode; HashTableNode* NewHSTNode(int i) { HashTableNode* htb; htb = (HashTableNode*)malloc(sizeof(HashTableNode)); htb->pos = i; htb->link = NULL; htb->branch = NULL; return htb; } HashNode* NewHashNode(int k) { HashNode* p; p= (HashNode*)malloc(sizeof(HashNode)); p->key = k; p->next = NULL; return p; } HashTableNode* CreateHashTable() { int i; HashTableNode* p, * r = NULL, * first=NULL; for (i = 0; i < M;i++) { p = NewHSTNode(i); if (first!=NULL) { r->link = p; } else { first = p; } r = p; } return first; } void Search(HashTableNode* first, int k) { int position; HashNode * s; HashTableNode* temp; temp = (HashTableNode*)malloc(sizeof(HashTableNode)); s = (HashNode*)malloc(sizeof(HashNode)); temp = first; position = k % M; for (; temp; temp = temp->link) { if (temp->pos == position) { break; } } if (temp->branch == NULL) { printf("Find Nothing on %dn",k); } else { s = temp->branch; while (s) { if (s->key==k) { printf("find %d, position is: %dn",k, temp->pos); return; } else { s = s->next; } } printf("Find Nothing on %dn", k); } } void Insert(HashTableNode* first, int k) { int position; HashNode* p, * s; HashTableNode* temp; s = (HashNode*)malloc(sizeof(HashNode)); temp = (HashTableNode*)malloc(sizeof(HashTableNode)); p = NewHashNode(k); position = k % M; temp = first; for (; temp; temp = temp->link) { if (temp->pos==position) { break; } } if(temp->branch ==NULL) { temp->branch = p; } else { s = temp->branch; while (s->next) { s = s->next; } s->next = p; } } void Delete(HashTableNode* first, int k) { int position; HashNode* s, *p; HashTableNode* temp; s = (HashNode*)malloc(sizeof(HashNode)); p = (HashNode*)malloc(sizeof(HashNode)); temp = (HashTableNode*)malloc(sizeof(HashTableNode)); position = k % M; temp = first; for (; temp; temp = temp->link) { if (temp->pos == position) { break; } } if (temp->branch == NULL) { printf("Find Nothing on %d, cannot delete!n", k); } else { s = temp->branch; while (s) { if (s->key == k) { if (s== temp->branch) { printf("find %d, position is: %d ", k, temp->pos); temp->branch=s->next; printf("has been deleted!n"); free(s); return; } else { printf("find %d, position is: %d ", k, temp->pos); printf("has been deleted!n"); p->next = s->next; free(s); return; } } else { p = s; s = s->next; } } printf("Find Nothing on %d, cannot delete!n", k); } } void PrintHashTable(HashTableNode* first) { HashNode* s; HashTableNode* temp; s = (HashNode*)malloc(sizeof(HashNode)); temp = (HashTableNode*)malloc(sizeof(HashTableNode)); printf("HashTable Content here: n"); temp = first; for (; temp; temp = temp->link) { printf("Position[%d]: ", temp->pos); if (temp->branch!=NULL) { s = temp->branch; while (s) { printf("%d ",s->key ); s = s->next; } } printf("n"); } } void main() { HashTableNode* htb; htb = CreateHashTable(); Insert(htb, 11); Insert(htb, 33); Insert(htb, 55); Insert(htb, 66); Insert(htb, 36); Insert(htb, 69); Insert(htb, 16); Insert(htb, 49); Insert(htb, 82); Delete(htb, 49); Search(htb, 82); PrintHashTable(htb); system("pause"); }
Console out result:
find 49, position is: 5 has been deleted!
find 82, position is: 5
HashTable Content here:
Position[0]: 11 33 55 66
Position[1]:
Position[2]:
Position[3]: 36 69
Position[4]:
Position[5]: 16 82
Position[6]:
Position[7]:
Position[8]:
Position[9]:
Position[10]:
请按任意键继续. . .
C:C程序&C语言数据结构C语言数据结构_从入门到入坑9拉链法-散列表Debug拉链法-散列表.exe (进程 1800)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .



