数据结构实验报告之静态查找表.docxVIP

  • 20
  • 0
  • 约6.11千字
  • 约 19页
  • 2020-03-26 发布于江西
  • 举报
数据结构实验报告 题目:静态查找表的实现 成  绩 ____________________ 2014 年 6 月 10 号 静态查找表抽象数据类型的实现 一、设计任务、要求及所用的软件环境或工具: 1.设计任务及要求:用 C 语言实现静态查找表的抽象数据类型 2.软件环境:win7 3.开发工具:C-Free 二、抽象数据类型的实现 1. 题目 采用顺序存储和链式存储为存储结构,实现抽象数据类型 StaticSearchTable。 ADT StaticSearchTable{ 数据对象 D:D 是具有相同特性的数据元素的集合。各个数据元素 含有类型相同的关键字,可唯一标识元素的关键字。 数据关系 R:数据元素同属一个集合。 基本操作 P: Create(ST,n); 操作结果:构造一个含 n 个数据元素的静态查找表 ST。 Destroy(ST); 初始条件:静态查找表 ST 存在。 操作结果:销毁表 ST。 Search(ST,key); 初始条件:静态查找表 ST 存在,key 为和关键字类型相同的 给定值。 操作结果:若 ST 中存在其关键字等于 key 的数据元素,则 函数值为其值或在表中的位置,否则为“空”。 Traverse(ST,Visit()); 初始条件:静态查找表 ST 存在,Visit 是对元素操作的应用 函数。 操作结果:按某种次序对 ST 的每个元素调用函数 Visit()一 次且仅一次。一旦 Visit()失败,则操作失败。 }ADT StaticSearchTable 2.存储结构定义 *公用头文件 DS0.h: #includestdio.h #includemalloc.h #includemath.h *预定义常量和类型 //函数结果状态代码 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 typedef int Status; typedef int KeyType; typedef float KeyType; typedef char KeyType; typedef int ElemType; typedef ElemType TElemType; 1)顺序存储结构 typedef struct{ ElemType *elem; //数据元素存储空间基址,0 号单元留空 int length; //表长 }SSTable; 2)二叉链表存储结构 typedef struct BiTNode{ TElemType data; struct BiTNode *lchild,*rchild; //左右孩子指针 }BiTNode,*BiTree; 3. 算法设计 1)顺序表的查找 void Creat_Seq(SSTable *ST,ElemType r[],int n){ int i; (*ST).elem = (ElemType*)calloc(n+1,sizeof(ElemType)); //动态生成 n+1 个数据元素空间(0 号单元不用) if(!(*ST).elem) exit(0); for(i=1;i=n;i++) (*ST).elem[i]=r[i-1]; //将数组 r 的值依次赋给 ST (*ST).length=n; } Status Destroy_Seq(SSTable ST){ free(ST.elem); ST.elem = NULL; ST.length = 0; return OK; } int Search_Seq(SSTable ST,KeyType key){ int i; ST.elem[0].key=key; //哨兵 for(i=ST.length;!(ST.elem[i].key==key);--i); //从后往前找 return i; //找不到时,i 为 0 } void Traverse(SSTable ST,void(*Visit)(ElemType)){ ElemType *p; int i; p=++ST.elem; //p 指向第一个元素 for(i=1;i=ST.length;i++) Visit(*p++); } 2)有序表的查找 int Search_Bin(SSTable ST,KeyType key){ int low,high,mid; = 1;high = ST.length; //置区间初值 while(low=high){ = (low + high)/2; if(key==ST.elem[mid]) return mid; //找到待查元素 else if(keyST.elem[mid]) high = mid - 1; /*继

文档评论(0)

1亿VIP精品文档

相关文档