数据结构->查找

来源:互联网 发布:网络管理员好考吗 知乎 编辑:程序博客网 时间:2024/06/13 01:57

1.输入一批有序的整形数值,利用折半插找的算法实现查找某数的过程。

2.利用一批数据(不超过13个数),构建一棵二叉排序树,并实现中序遍历该树。

3.将上面的数据利用长度为15的哈希表存储,输出存储后的哈希表。哈希函数采用key%13。

4.根据全班学生的姓名,用拉链法解决碰撞的方法构造一个散列表,选择适当的散列函数,设计并实现插入、删除和查找算法。

5.设计主函数,上机实现。  

#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#define maxn 100using namespace std;#define N 30typedef struct node1{    char name[20];    struct node1 *next;} NODE;NODE *HashTable[N];typedef struct node{    int  data;    struct node *lchild,*rchild;} dsnode,*dstree;int data[maxn];int hs (int data[],int n,int t){    data[0]=t;    int r=n,l=0;    int mid;    while(r>=l)    {        mid=(r+l)/2;        if(data[mid]==t)            return mid;        else  if(data[mid]>t) r=mid-1;        else            l=mid+1;    }    return 0;}void charu(dstree &T,int t){    dsnode *S;    if(!T)    {        S=(dsnode *)malloc(sizeof(dsnode));        //   printf("%p\n",S);        S->data=t;        S->lchild=NULL;        S->rchild=NULL;        T=S;    }    else if(t<T->data)        charu(T->lchild,t);    else if(t>T->data)        charu(T->rchild,t);}void creat(dstree &T){    int data;    scanf("%d",&data);    while(data!=-1)    {        charu(T,data);        scanf("%d",&data);    }    //printf("%p\n",T);}int s[15],cnt=0;int tt[15];void bianli(dstree T){    if(T)    {        bianli(T->lchild);        printf("%d ",T->data);        s[cnt++]=T->data;        bianli(T->rchild);    }}void H(int key){    int f=key%13;    if(tt[f]==0)        tt[f]=key;    else    {        for(int i=1; i<15; i++)        {            f=(f+i)%15;            if(tt[f]==0)            {                tt[f]=key;                break;            }        }    }}int hh(char name[]){    int gg=1;    for(int i=0; i<strlen(name); i++)        gg=gg+(name[i]*2);    return gg%N;}int searchh(char name[]){    int hs=hh(name);    NODE *s=HashTable[hs];    int i=1;    for(; s!=NULL; s=s->next)    {        i++;        if(strcmp(s->name,name)==0)            return i;    }    return -1;}void creathashmap(dstree T){    for(int i=0; i<=15; i++)        tt[i]=0;    for(int i=0; i<cnt; i++)        H(s[i]);}void crhash(char name[]){    int hasht;    hasht=hh(name);    NODE *h=(NODE *)malloc(sizeof(NODE));    strcpy(h->name,name);    h->next=HashTable[hasht];    HashTable[hasht]=h;}int delhh(char name[]){    int hs=hh(name);    NODE *p=HashTable[hs],*s=HashTable[hs];    int i=0;    for(; s!=NULL; s=s->next)    {        i++;        if(strcmp(s->name,name)==0)        {            p->next=s->next;            return 1;            free(s);        }        p=s;    }    return -1;}int main(){    int n,t,i;    //折半    scanf("%d",&n);    for(i=1;i<=n;i++)     scanf("%d",&data[i]);     printf("请输入要查找的数\n");     scanf("%d",&t);     printf("查找%d的结果为:\n",t);     if(hs(data,n,t)!=0)     printf("%d的位置为%d\n",t,hs(data,n,t));     else         printf("查无此数\n");     printf("请输入要查找的数\n");     scanf("%d",&t);     printf("查找%d的结果为:\n",t);     if(hs(data,n,t)!=0)     printf("%d的位置为%d\n",t,hs(data,n,t));     else         printf("查无此数\n");         //排序二叉树       dstree T=NULL;         creat(T);         printf("中序遍历结果为 :");         bianli(T);         printf("\n");         creathashmap(T);    printf("创建散列表结果为 :");         for(int i=0;i<15;i++)             printf("%d ",tt[i]);         printf("\n");         getchar();    char name[20];    printf("输入要创建hashmap的姓名\n");    gets(name);    while(strcmp(name,"end")!=0)    {        crhash(name);        gets(name);    }    //search hash    printf("\n查找tony\n");    int kk=searchh("tony");    if(kk==-1)        printf("无此人\n");    else        printf("此人存在于hashmap%d的第%d个\n",hh(name),kk);    printf("\n删除tony\n");    kk=delhh("tony");    if(kk==-1)        printf("无此人\n");    else        printf("删除成功\n");    printf("\n再次查找tony\n");kk=searchh("tony");    if(kk==-1)        printf("无此人\n");    else        printf("此人存在于hashmap%d的第%d个\n",hh(name),kk);    return 0;}/*102 3 6 9 15 18 19 52 62 6962908956324353635286957565-1asfdsdsgsdjhsdfjksdfkjsdjkdsfjlslkfkjrferjfksjktonysdjfldfkllskdjffdsjsdlljjend*/


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 我没有公积金怎么办 教育局怎么办学历认证 退役档案丢失怎么办 杭州人护照怎么办? 高校大学生怎么办护照 昆山外地人怎么办护照 北京怎么办台湾通行证 驾校卡档案怎么办 第一次办身份证怎么办 医保卡失磁怎么办 医疗保险怎么办%3f 怎么办社会养老保险 医保欠费住院怎么办 首次参加医保怎么办 哈尔滨社保欠费怎么办 齐齐哈尔健康证怎么办 科目二下雨怎么办 考科二下雨怎么办 科二下雨怎么办 考科二下暴雨怎么办 坐车没有身份证怎么办 准考证下载过期怎么办 准考证过期怎么办 驾照三年没考完怎么办 教练不退钱怎么办 驾照科一考不过怎么办 科一考不过去怎么办 科目一考不过去怎么办 考科三紧张怎么办 误入单行道怎么办 住在高速旁很吵怎么办 凌晨到北京站怎么办 买票待核验怎么办 春运买到无座票怎么办 坐汽车误点怎么办 打电话上门服务被骗怎么办 供热不达标怎么办 退休护士注册怎么办 护士资格证怎么办 护士证满五年了怎么办 护士资格证过期怎么办