实验内容:
基本内容:
算法1:采用顺序存储结构创建静态查找表,对查找表进行顺序查找和改进的顺序查找,并对其查找效率进行比较;
算法2:采用顺序存储结构创建静态查找表——有序表,对有序表进行二分查找;
选作内容:
编程实现按二叉排序树算法进行查找。

静态查找表算法(未改进):
代码:

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100typedef int keytype;
typedef struct
{  keytype key;int info;
}ElemType;typedef  struct
{  ElemType  elem[MAXSIZE];int  length;
}Sstable;int Search_Seq(Sstable ST,keytype key)
{int i=1;while(i<=ST.length){if(key==ST.elem[i].key){return i;}i++;}
}void Create(Sstable &ST,int n)
{int i;printf("输入元素:"); for(i=1;i<=n;i++)scanf("%d",&ST.elem[i].key);
} int main()
{Sstable ST;keytype key;int i;printf("输入长度:");scanf("%d",&ST.length);Create(ST,ST.length);while(1){printf("输入要查找的元素:");scanf("%d",&key);i=Search_Seq(ST,key);if(i) printf("元素位置在:%d\n",i);else  printf("元素不存在\n");        }
}

运行结果:

静态查找表算法(改进):
代码:

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100typedef int keytype;
typedef struct
{  keytype key;int info;
}ElemType;typedef  struct
{  ElemType  elem[MAXSIZE];int  length;
}Sstable;int Search_Seq(Sstable ST,keytype key)
{int i=ST.length;ST.elem[0].key=key;while(i>=0){if(key==ST.elem[i].key){return i;}i--;}
}void Create(Sstable &ST,int n)
{int i;printf("输入元素:"); for(i=1;i<=n;i++)scanf("%d",&ST.elem[i].key);
} int main()
{Sstable ST;keytype key;int i;printf("输入长度:");scanf("%d",&ST.length);Create(ST,ST.length);while(1){printf("输入要查找的元素:");scanf("%d",&key);i=Search_Seq(ST,key);if(i) printf("元素位置在%d\n",i);else  printf("元素不存在\n");        }
}

运行结果:

折半查找:
代码:

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100typedef int keytype;
typedef struct
{  keytype key;int info;
}ElemType;typedef  struct
{  ElemType  elem[MAXSIZE];int  length;
}Sstable;int Search_Bin(Sstable ST,keytype key)
{int low,high,mid;low=1;high=ST.length;while(low<=high){mid=(low+high)/2;if(key==ST.elem[mid].key) return mid;else if(key<ST.elem[mid].key) high=mid-1;else low=mid+1;}return 0;
}void Create(Sstable &ST,int n)
{int i;printf("输入元素:"); for(i=1;i<=n;i++)scanf("%d",&ST.elem[i].key);
} int main()
{Sstable ST;keytype key;int i;printf("输入长度:");scanf("%d",&ST.length);Create(ST,ST.length);while(1){printf("输入要查找的元素:");scanf("%d",&key);i=Search_Bin(ST,key);if(i) printf("元素位置在:%d\n",i);else  printf("元素不存在\n");        }
}

运行结果:

选做(二叉排序树查找):

#include<stdio.h>
#include<stdlib.h>
#define OVERFLOW -2
#define OK 1
#define TRUE 1
#define ERROR 0
#define FALSE 0
#define EQ(a,b) ((a)==(b))
#define LT(a,b) ((a)<(b))
#define LQ(a,b) ((a)<=(b))typedef int Status;typedef struct Volunteer {int key;char name[15];char phoneNo[11];
}ElemType;typedef struct BiNode{ElemType data;struct BiNode *lchild,*rchild;
}BiNode, *BiTree;Status SearchBST(BiTree T,int key,BiTree f,BiTree &p)
{if(!T){p=f;return FALSE;}else if(EQ(key,T->data.key)){p=T;return TRUE;}else if LT(key,T->data.key){return SearchBST(T->lchild,key,T,p);}elsereturn SearchBST(T->rchild,key,T,p);
}Status InsertBST(BiTree &T,ElemType e)
{BiTree s,p;if(!SearchBST(T,e.key,NULL,p)){if(!(s=(BiTree)malloc(sizeof(BiNode))))exit(OVERFLOW);s->data=e;s->lchild=s->rchild=NULL;if(!p){T=s;}else if LT(e.key,p->data.key){p->lchild=s;}else {p->rchild=s;}return TRUE;}elsereturn FALSE;}
Status Delete(BiTree &p)
{BiTree q,s;if(!p->rchild){q=p;p=p->lchild;free(q);}else if(!p->lchild){q=p;p=p->rchild;free(q);}else{q=p;s=p->lchild;while(s->rchild){q=s;s=s->rchild;}p->data=s->data;if(q!=p){q->rchild=s->lchild;}else{q->lchild=s->lchild;}free(s);return TRUE;}
}Status DeleteBST(BiTree &T,int key)
{if(!T){return ERROR;}else {if(EQ(key,T->data.key)){Delete(T);}else if(LT(key,T->data.key)){return DeleteBST(T->lchild,key);}else{return DeleteBST(T->rchild,key);}}
}void InOrderTraverse(BiTree T)
{if(T){InOrderTraverse(T->lchild);printf("%d\t%s\t%s\n",T->data.key,T->data.name,T->data.phoneNo);InOrderTraverse(T->rchild);}
}void showmenu()
{printf("******欢迎进入志愿者信息管理系统******\n");printf("*            1:我要报名              *\n");printf("*          2:我要取消报名            *\n");printf("*  3:我想知道关心的同伴是否也报名了  *\n");printf("*       4:看看全部的报名信息         *\n");printf("*            5:退出系统              *\n");printf("*     请选择你所要执行的操作(1-5)  *\n");printf("**************************************\n");
}
int main()
{BiTree T=NULL,p=NULL;ElemType e;int no,flag,st;while(1){showmenu();scanf("%d",&flag);switch(flag){case 1:printf("请输入你的学号,姓名和联系方式,用空格隔开!\n");printf("\n");scanf("%d%s%s",&e.key,e.name,e.phoneNo);InsertBST(T,e);printf("\n");printf("报名成功,你是一个有爱心的同学,为你点赞!\n");printf("\n");break;case 2:if(!T){printf("请先报名,再操作!\n");break;}printf("请输入你的学号: ");scanf("%d",&no);DeleteBST(T,no);printf("\n");printf("你的报名信息已删除,不过欢迎你随时加入我们志愿者团队哦!\n");printf("\n");break;case 3:if(!T){printf("二叉排序树还未建立,请先建立后再操作!\n");break;}printf("请输入你关心的同伴的学号:");scanf("%d",&no);st=SearchBST(T,no,NULL,p);if(st){printf("\n");printf("你关心的同学已经报名,快来报名加入我们的志愿者活动吧!\n");printf("\n");}else{printf("\n");printf("你关心的同伴还未报名,快邀请同伴一起加入我们的志愿队伍吧!\n");printf("\n");}break;case 4:printf("已报名的志愿者信息为:\n");printf("\n");InOrderTraverse(T);printf("\n");break;case 5:exit (0);default :printf("输入非法,请输入数字1-5!\n");fflush(stdin);}}
}

数据结构 查找 静态查找表算法 折半查找 二叉排序树查找算法 实验报告相关推荐

  1. 数据结构--链栈的c语言实现(超详细注释/实验报告)

    数据结构–链栈的c语言实现(超详细注释/实验报告) 知识小回顾 栈(Stack)作为一种限定性线性表,是将线性表的插入和删除操作限制为仅在表的一端进行,通常将表中允许进行插入.删除操作的一端成为栈顶( ...

  2. 静态顺序表创建,初始化,插入,删除,查找

    #include<stdlib.h> #define MaxSize 20 typedef struct {int data[MaxSize];int length; }sqlist; / ...

  3. 数据结构之哈希表以及常用哈希的算法表达(含全部代码)

    目录 为什么要有哈希 哈希表 含义 创建哈希表需要注意的点 算法的选择 哈希冲突的处理 线性探测法 再哈希法 链表法 哈希表的实现(代码部分) 确定结构体(节点) 准备一个哈希算法 创建一个哈希表(即 ...

  4. 数据结构之静态顺序表(含游戏菜单)

    目录 一.什么是顺序表? 二.静态顺序表和动态顺序表的不同点 三.什么是静态顺序表 四:函数接口实现 1.初始化结构体 2.打印数据 3.头插数据 4.尾插数据 5.头删数据 6.尾删数据 附:原码链 ...

  5. c语言字符串算法判断实验原理,C语言词法分析器实验报告

    <C语言词法分析器实验报告>由会员分享,可在线阅读,更多相关<C语言词法分析器实验报告(22页珍藏版)>请在人人文库网上搜索. 1.计算机科学与工程系编译原理课程设计实验报告姓 ...

  6. 算法设计 (分治法应用实验报告)基于分治法的合并排序、快速排序、最近对问题

    一.名称 分治法应用 二.目的 1.掌握分治法的基本思想: 2.学会运用分治法解决实际系统设计应用中碰到的问题. 三.要求 1.实现基于分治法思想的合并排序: 2.实现基于分治法思想的快速排序: 3. ...

  7. 字节跳动算法工程师总结:java接口实验报告总结

    本文框架如下 第一部分,主要是在阅读代码过程中的日志和笔记: 第二部分,主要介绍了 Redis 的主要框架,以及 Redis 是如何提供服务的,从一个最简单的命令开始讲起: 第三部分,主要介绍 Red ...

  8. 路径选择算法|Floyd算法|Dijkstras算法(带GUI界面带实验报告)

    源码地址:https://github.com/lllunaticer/pathFindGUI 使用python 做的带GUI界面的最短路径算法实现 下面是实际效果: 转载于:https://www. ...

  9. “查找”学习提纲(二)——树型查找和散列查找

    文章目录 前言 代码模板 二叉排序/查找/搜索树查找 适用 性能 代码模板 折半查找和二叉排序树查找总结 平衡二叉(排序)树/AVL树 构造相应层数的树至少需要的结点数 平衡调整的过程 平衡调整的类型 ...

  10. 数据结构之动态顺序表(含游戏菜单)

    上一篇文章我们谈了数据结构的静态顺序表,以及实现了静态顺序表,具体可以看我的上一篇文章->>>数据结构之静态顺序表. 我们可以知道,静态顺序表的缺点是:  因为使用的是定长数组,所以 ...

最新文章

  1. 1995年,比尔·盖茨解释什么是互联网
  2. mysql常见面试题(持续更新)
  3. sicp 4.2.1两题
  4. 关于输入输出流的心得
  5. windows下使用curl以及常用curl命令
  6. linux安装mysql的分支mariadb
  7. Django学习记录
  8. 汇编语言中可以定义变量吗?怎么定义?有局部变量和全局变量之分吗?作用域是什么?
  9. 团队项目--设计类图
  10. python语言入门-Python语言十分钟快速入门
  11. php ai,php能做AI智能吗
  12. 修剪花卉(codevs 1794)
  13. 网站特效圈小猫游戏代码
  14. 计算机有损压缩编码,有损压缩格式有哪些
  15. Html5开发的在线画板涂鸦,使用html5 canvas制作涂鸦画板
  16. Word2013撤销不能使用
  17. centos 官网下载
  18. 金融领域的数字化转型和科技创新有哪些应用?
  19. windows和linux共用蓝牙鼠标,Ubuntu和Windows双系统蓝牙设备共享配对
  20. 网络层IP协议和数据链路层

热门文章

  1. 二手电商的盛与衰:闲鱼持续扩张,爱回收稳扎稳打,转转战略失焦
  2. 致饱醉豚:子虚乌有的程序员六宗罪,这锅,我们不背!
  3. Augment Reality(AR)现实增强的原理
  4. 羊皮卷二我要用心中的爱来迎接今天(中英对照)
  5. 核雕图案的寓意(下)
  6. 打造无懈可击的Web设计——流动布局和弹性布局
  7. vue 在哪个生命周期进行数据请求
  8. gbip指令集_ARM汇编指令集
  9. 心血来潮拆华硕X54H笔记本(打算升级)
  10. Python——帮助小学生练习10以内加法的程序