Hashtable 2

package ZHANG.API;
import java.util.Enumeration;
import java.util.Hashtable;


public class MyKey {

 private String name = null;
 private int age = 0;
 
 public MyKey(String string, int i) {
  name = string;
  age = i;
 }

 public int hashCode() {
  return name.hashCode()+age;
 }

 public boolean equals(Object obj) {
  if(obj instanceof MyKey){
   MyKey objtem = (MyKey)obj;
   if(name.equals(objtem.name) && age==objtem.age){
    return true;
   }else{
    return false;
   }
  }else{
   return false;
  }
 }
 public String toString(){
  return name +","+ age;
 }

 public static void main(String[] args) {
  Hashtable ht = new Hashtable();
  ht.put(new MyKey("yw",44), new Integer(1));
  ht.put(new MyKey("yws",23), new Integer(4));
  ht.put(new MyKey("yw",23), new Integer(1));
  
  Enumeration e = ht.keys();
  while(e.hasMoreElements()){
   MyKey key = (MyKey) e.nextElement();
   System.out.println(key+"->"+ht.get(key));
  }
 }

}

#include <stdio.h> #include <stdlib.h> typedef int DataType; #define MaxSize 11 struct Node { DataType data; struct Node *next; }; typedef struct HashTable2 { struct Node *ht[MaxSize];//开散列表 } HashTable2; HashTable2* createHashTable2() { //初始化开散列表 HashTable2 *ht = (HashTable2*) malloc(sizeof(HashTable2)); for (int i = 0; i < MaxSize; i++) { ht->ht[i] = NULL; } return ht; } void destroyHashTable2(HashTable2 *ht) {//释放同义词子表结点 struct Node *p = NULL, *q = NULL; for (int i = 0; i < MaxSize; i++) { p = q = ht->ht[i]; while (p != NULL) { p = p->next; free(q); q = p; } } free(ht); } int H(int k) {//散列函数 return k % 11; } void Print(HashTable2 *ht) { struct Node *p = NULL; for (int i = 0; i < MaxSize; i++) { p = ht->ht[i]; printf("%d ", i); while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); } } struct Node *Search(HashTable2 *ht, int k) {//查找 int j = H(k); //计算散列地址 struct Node *p = ht->ht[j]; //工作指针p初始化 while (p != NULL) { //TODO 查找元素 找到则返回指针p //=========begin========= //==========end========== } return NULL; //查找失败 } int Insert(HashTable2 *ht, int k) {//插入 int j = H(k); //计算散列地址 struct Node *p = Search(ht, k); if (p != NULL) { return -1; //已存在元素k,无法插入 } else { //TODO 头插法 插入元素 //=========begin========= ht->ht[j] = p; return 1; //插入成功标志 //==========end========== } } int Delete(HashTable2 *ht, int k) {//删除 int j = H(k); struct Node *p = ht->ht[j]; struct Node *last = p; // 头节点即为目标元素 if (p->data == k) { ht->ht[j] = p->next; free(p); return 1; } else p = p->next; while (p != NULL) { if (p->data != k) { last = p; p = p->next; } else { // TDOO 其他情况删除元素成功则返回true //=========begin========= free(p); return 1; //==========end========== } } return -1; } int main() { //主函数信息,请勿修改 HashTable2 *HT = createHashTable2(); int k = 0; scanf("%d", &k); while (k) { Insert(HT, k); scanf("%d", &k); } Print(HT); scanf("%d", &k); int sign = Delete(HT, k); if (sign == 1) Print(HT); else printf("未找到此元素\n"); destroyHashTable2(HT); return 0; }
最新发布
06-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值