哈希表 挂链法

    xiaoxiao2021-12-14  20

    #include <stdio.h> #include <windows.h> int HelpPosition; int position; typedef int ElementType; /* 单链表定义 */ typedef struct Node *PtrToNode; struct Node { ElementType data; //存储数据 int ListPosition; //存储在链表上的第几结点 struct Node *next; }; typedef PtrToNode List; /* 哈希表建立 */ typedef struct TblNode *HashTable; struct TblNode { static int TableSize; //表的最大长度 List Heads; //指向链表头结点的数组 }; int TblNode::TableSize = 11; /* 初始化哈希表 */ HashTable CreateTable() { HashTable H; int i; H = (HashTable)malloc(sizeof(struct TblNode)); H->Heads = (List)malloc(H->TableSize*sizeof(struct Node)); /*初始化表头文件*/ for( i=0; i<H->TableSize;i++) { H->Heads[i].next = NULL; } return H; } /* 找到Key在哈希表的那个位置 并返回结点*/ List Find(HashTable H,ElementType Key) { List P; HelpPosition = 1; //当前链表第几结点 position = Key % H->TableSize; /*初始散列位置*/ P = H->Heads[position].next; /*从该链表的第一个结点开始*/ /* 当未到表尾,并且Key未找到时*/ while( P!=NULL && P->data != Key) { P = P->next; HelpPosition++; } return P; } /* 插入Key到哈希表 */ bool Insert(HashTable H,ElementType Key) { List P,NewP; P = Find(H,Key); if(!P) { NewP = (List)malloc(sizeof(struct Node)); NewP->data = Key; NewP->ListPosition = HelpPosition; position = Key % H->TableSize; NewP->next = H->Heads[position].next; H->Heads[position].next = NewP; return true; } }
    转载请注明原文地址: https://ju.6miu.com/read-964273.html

    最新回复(0)