⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 algo8-9.cpp

📁 数据结构相关代码
💻 CPP
字号:
 // algo8-9.cpp 检验bo8-7.cpp的程序
 #include"c1.h"
 #define NULL_KEY 0 // 0为无记录标志
 #define N 15 // 数组可容纳的数据元素个数
 int m; // 哈希表表长,全局变量
 typedef int KeyType; // 定义关键字域为整型
 struct ElemType // 数据元素类型
 { KeyType key;
   int order;
 };

 #include"c8-2.h"
 #include"c8-11.h"
 #include"bo8-7.cpp"

 void Visit(int p,ElemType r)
 { printf("address=%d (%d,%d)\n",p,r.key,r.order);
 }

 void main()
 {
   ElemType r[N]; // 记录数组
   HashTable h;
   int i,n,p=0;
   Status j;
   KeyType k;
   FILE *f; // 文件指针类型
   f=fopen("f8-6.txt","r"); // 打开数据文件f8-6.txt
   do // 将数据文件中的记录依次读入记录数组r
   { i=fscanf(f,"%d%d",&r[p].key,&r[p].order); // 由文件输入数据给r[p]
     if(i!=-1) // 输入数据成功
       p++;
   }while(!feof(f)&&p<N); // 未到数据文件的结尾且记录数组未满
   fclose(f); // 关闭数据文件
   InitHashTable(h); // 构造一个空的哈希表h
   for(i=0;i<p-1;i++)
   { j=InsertHash(h,r[i]); // 在h中插入前p-1个记录(最后1个记录不插入)
     if(j==DUPLICATE)
       printf("表中已有关键字为%d的记录,无法再插入记录(%d,%d)\n",
       r[i].key,r[i].key,r[i].order);
   }
   printf("按哈希地址的顺序遍历哈希表:\n");
   TraverseHash(h,Visit); // 按哈希地址的顺序遍历哈希表h
   printf("请输入待查找记录的关键字:");
   scanf("%d",&k); // 输入待查找记录的关键字
   j=SearchHash(h,k,p,n); // 查找时n值无用
   if(j==SUCCESS) // 查找成功
     Visit(p,h.elem[p]); // 输出该纪录
   else // 查找失败
     printf("未找到\n"); // 输出未找到信息
   j=InsertHash(h,r[i]); // 插入最后1个记录(需重建哈希表)
   if(j==ERROR) // 重建哈希表
     j=InsertHash(h,r[i]); // 重建哈希表后重新插入
   printf("按哈希地址的顺序遍历重建后的哈希表:\n");
   TraverseHash(h,Visit); // 按哈希地址的顺序遍历哈希表h
   printf("请输入待查找记录的关键字:");
   scanf("%d",&k); // 输入待查找记录的关键字
   j=SearchHash(h,k,p,n); // 查找时n值无用
   if(j==SUCCESS) // 查找成功
     Visit(p,h.elem[p]); // 输出该纪录
   else // 查找失败
     printf("未找到\n"); // 输出未找到信息
   DestroyHashTable(h); // 销毁哈希表h
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -