大神请赐教~~这个怎么才能实现

#include<string.h>
#include<ctype.h>
#include<malloc.h>
#include<limits.h>
#include<stdio.h> 
#include<stdlib.h>
#include<math.h>
#define HASHSIZE 41
#define NULLKEY "\0"
typedef int KeyType;
typedef struct{
	KeyType key;
	char pinyin[20];
	char name[10];
	char song[50];
}DataType; 

typedef struct{ 
    DataType *data;
    int count;
    int sizeindex;
}HashItem,HashTable[HASHSIZE];

Status InitHashTable(HashTable &ht)// 操作结果: 构造一个空的哈希表
{ int i;
   ht.count=0; // 当前元素个数为0
   ht.sizeindex=0; // 初始存储容量为hashsize[0]
   m=HASHSIZE;
   ht.data=(ElemType*)malloc(m*sizeof(ElemType));
   if(!ht.data)
     exit(OVERFLOW); // 存储分配失败
   for(i=0;i<m;i++)
     ht.data[i].key=NULLKEY; // 未填记录的标志
   return OK;
}
unsigned Hash(KeyType key)// 一个简单的哈希函数(m为表长,全局变量)
{ return key%m;
}

void collision(int &p,int d) // 线性探测再散列
{ 
   p=(p+d)%m;// 开放定址法处理冲突
   
   
void CreateHash(HashTable*ht, int items[],int n){
	int i; 
	for(i=0;i<HASHSIZE;i++){
		ht[i]data.key=NULL;
		ht[i].time=0;
	}
	for(i=0;i<n;i++)
	HashInsert(ht,items[i]);
}

int HashInsert(HashTable*ht,DataType x){
	int addr;
	addr=Hashsearch(ht,x);
	if(addr>0) return 0;
	ht[-addr].data=key;
	ht[-addr].times=1;
	return 1;
}

int Hashsearch(HashTable*ht,DataType x){
	int addr;
	addr=HashFunc(x.key);
	while(ht[addr].data.key!=NULL&&ht[addr].data.key!=x.key)
	 addr = Collision(addr);
	if(ht[addr].data.key==x.key)  return addr;
	else
	 return -addr; 
}
	

void CreateBoard(HashTable ht,char filename[]){
	//建立哈希表,  为文件
    DataType items(filename,items);
    int n=0;
    n=ReadBoard(filename,items);
	CraeteHash(ht,items,n)	 ;
}

void Vote(HashTable ht,char filename[],DataType x){
	//x为歌手
    DataType items[HASHSIZE];
    int addr;
    addr=Hashsearch(ht,x);
    if(addr>0){
    	ht[addr].data.key++;
    	x=ht[addr].data;
    }
	else{
		addr=-addr;
		ht[addr].data=x;
	} 
	WriteBoard(filename,x,addr);
	printf("\n   Ok    \n\n");
}

void DispVote(HashTable ht,DataType x){ 
//x为歌手
     int addr;
	 addr=Hashsearch(ht,x);
	 if(addr>=0);
	 printf("\n\n歌手%S的票数为[%d]\n\n",ht[addr].data.name,ht[addr].data.key);
	 else printf("\n没有你查找的歌手") ;
}

void DispSong(HashTable ht,DataType x){
	//x 歌手 
	int addr= Hashsearch(ht,x);
	if(addr>=0) 
	 printf("\n\n歌手%S的票数为[%s]\n\n",ht[addr].data.name,ht[addr].data.song);
	 else printf("\n没有你查找的歌手");
}

int HashFunc(char key[]){
	//k歌手
	int addr=0,i=0;
	while(key[][i]!='\0'){addr=(int)key[i];i++;
	} 
	return addr%HASHSIZE;
}

int ReadBoard(char filename[],DataType items[]){
	//items为返回读取内容
	FILE*fp;
	int n=0;
	HashItem hi[HASHSIZE] ;
	fp=fopen(filename,"rb");
	if(fp==NULL){printf("不能打开文件");return-1; 
	}
	while(!feof(fp)){
		fread(&hi[n],sizeof(HashItem),1,fp);
		itemsn[n]=hi[n].data;
		n++;
	}
	fclose(fp);
	return n;
}

int WriteBoard(char filename[],DataType x,long offset){
	//x为文件写入内容,off为文件的偏移量
	FILE*fp;
	HashItem item;
	item.data=x;
	fp=fopen(filename,"r+b");
	if(fp==NULL){printf("不能打开"); return 0; 
	} 
	fseek(fp,offset*sizeof(HashItem),1,fp);
	fcolse(fp);
	return 1;
}
 
 
 int Hashsearch(HashTable ht,DataType x){
 int addr;
 addr=HashFunc(x.pinyin);
 while(strcmp(ht[addr].data.pinyin,)) return addr;
 else return -addr;
 }


int main(int argc,char*argv[]){
  HashTable ht;
  int choice=0;
  DataType x;
  char filename[]=文件地址;
  CreateBoard(ht,filename)	;
  do{
  	printf("****************************************\n");
  	printf("*         流行歌手排行榜               *\n");
  	printf("*--------------------------------------*\n");
  	printf("*  1.为喜欢的歌手投票                  *\n");
  	printf("*  2.查看上榜歌手的主打歌              *\n");
  	printf("*  3.查查看歌手票数                    *\n");
  	printf("*  0.退出                              *\n");
  	printf("****************************************\n");
  	printf("输入选择序号(0.1.2.3): ");
   scanf("%d",&num);
   if(num<0||num>3)  continue;
   switch(num){
   	case1:
   		//投票
		flushall();
		printf("\n请输入歌手名:"); gets(x.nmae);
		printf("\输入歌手拼音名"); gets(x.song); x.key=1;
		Vote(ht,filename,x); brak;
	case2:
		//查看歌曲
	    flushall();	 
	    printf("\输入歌手拼音名"); gets(x.pinyin);
	    DispSong(ht,x); break;
    case3:
    	//查看票数
		printf("\输入歌手拼音名"); gets(x.pinyin); 
		DispVote(ht,x); break;
	
	case0:
	    exit(0) ;
	}
  }while(1);
  return 0;
}  

全部评论
你的代码粘贴下来出现好多编译错误啊,有木有一个没有错误的版本
点赞 回复 分享
发布于 2016-01-18 10:33

相关推荐

实习挂完提前批挂_提前批挂完秋招挂:我是来结束这个秋招的😤
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务