| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 500 人关注过本帖
标题:一些关于哈希表的问题------插队买票
只看楼主 加入收藏
a2482213
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-6-14
收藏
 问题点数:0 回复次数:1 
一些关于哈希表的问题------插队买票
问题就是我把哈希表里面的元素拿出来的时候为什么空的字符会是??就是排队的人那里
程序代码:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

#define max 100
#define null_key -1
#define del_key  -2

typedef struct Hashtable
{
    char key;
    int count;
    int frd;
} hashtable[max];

//查找元素
int search(hashtable ha, int p, char k)
{
    int i=0, adr;
    adr=k%p;
    while(ha[adr].key!=null_key && ha[adr].key!=k)
    {
        i++;
        adr=(adr+1)%p;
    }
    if(ha[adr].key==k)
        return adr;
    else
        return -1;
}


//插入元素
void insert(hashtable ha, int &n, char k, int p, int f)
{
    int i,adr;
    adr=k%p;
    if(ha[adr].key==null_key || ha[adr].key==del_key)
    {
        ha[adr].key=k;
        ha[adr].count=1;
        ha[adr].frd=f;
    }
    else
    {
        i=1;
        do
        {
            adr=(adr+1)%p;
            i++;
        } while(ha[adr].key!=null_key && ha[adr].key!=del_key);
        ha[adr].key=k;
        ha[adr].count=i;
        ha[adr].frd=f;
    }
    n++;

}



//建表
void create(hashtable ha, char x[], int n, int m, int p,int f[])
{
    int i,n1=0;
    for(i=0; i<m; i++)
    {
        ha[i].key=null_key;
        ha[i].count=0;
        ha[i].frd=0;
    }
    for(i=0; i<n; i++)
    {
        insert(ha,n1,x[i],p,f[i]);
    }
}



//输出元素
void disp(hashtable ha,int m)
{
    int i;
    printf("排队的序列:\t");
    for (i=0;i<m;i++) 
        printf(" %3d",i);
    printf("\n排队的人:\t");
    for (i=0;i<m;i++) 
        if (ha[i].key==null_key || ha[i].key==del_key)
            printf("    ");        
        else
            printf(" %3c",ha[i].key);
    printf("\n排队人的关系:\t");
    for (i=0;i<m;i++) 
        if (ha[i].key==null_key || ha[i].key==del_key)
            printf("    ");        
        else
            printf(" %3d",ha[i].frd);
    printf(" \n");
}

void main()
{
    int n=10;                        //n表示元素个数
    int m=13;                        //m表示数组空间
    int p=13;                        //求余的除数
    int r=1;                         //r表示朋友关系
    char k='n';                      //插入的朋友
    int a[max][2];                     //用来排队的数组
    int len=0;                       //记录排队的人数
    int adr=0;                       //记录查找后返回的地址
    int tmp;                         //记录找到朋友的位置
    int i; 
    char x[]={'a','b','c','d','e','f','g','h','i','j'};
    int f[]={1,1,2,3,4,4,4,4,5,5};
    hashtable ha;
    struct Hashtable *q=ha;
    create(ha, x, n, m, p, f);
    disp(ha, m);
//一开始的排队
    for (i=0; i<m; i++) 
    {
        if(ha[i].key!=null_key )
        {
            a[i][0]=ha[i].key;
            a[i][1]=ha[i].frd;
            len++;
        }
    }
    printf("排队的人数 %d\n", len);
    for(i=0; i<13; i++)
    {
            printf("排队的人 %c ", a[i][0]);
    }
    printf("\n");
//开始插队
    insert(ha, n, k, p, r);                            //先把插队的人放进哈希表里面
    adr=search(ha, p, k);                              //找到插队的人
    printf("在哈希表的地址为 %d\n", adr);
    for(i=0; i<len; i++)                               //在队伍中找到朋友的位置
    {
        if(a[i][1]==ha[adr].frd && a[i+1][1]!=ha[adr].frd)
            break;

    }
    tmp=i;
    for(i=13; i>tmp; i--)                           //找到朋友后朋友后移
    {
        a[i][0]=a[i-1][0];
        a[i][1]=a[i-1][1];
    }
    a[tmp+1][0]=k;
    a[tmp+1][1]=r;
    len++;
    for(i=0; i<14; i++)
    {
            printf("%c ", a[i][0]);
    }
    printf("\n");
//出队
    for(i=0; i<12; i++)
    {
        a[i][0]=a[i+1][0];
        a[i][1]=a[i+1][1];
    }
    a[13][0]=null_key;
    a[13][1]=null_key;
    a[12][0]=null_key;
    a[12][1]=null_key;
    for(i=0; i<13; i++)
    {
            printf("%c ", a[i][0]);
    }
}
搜索更多相关主题的帖子: color 元素 
2012-06-14 15:18
a2482213
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-6-14
收藏
得分:0 
哈希表的储存应该没有问题的
2012-06-14 15:21
快速回复:一些关于哈希表的问题------插队买票
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.067954 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved