寻求c语言程序高手指点~

1503人阅读
/************************************************************************
用c实现HASH表创建、插入、查找、删除、打印,实现并不是最完美的,欢迎指正补充!后续还有更多类似的实现放上来,
欢迎关注!!!
对本贴有更好的方法或建议可以给本人留言或发邮件:
************************************************************************/
#include &stdio.h&
#include &STDLIB.H&
#include &MEMORY.H&
#define STATUS int
#define FALSE 0
#define TRUE 1
#define VOID void
/****************************************
a)定义hash表和基本数据节点
*****************************************/
typedef struct _Node
struct _Node *
typedef struct _HASH_TABLE
NODE * value[10];
}HASH_TABLE;
/****************************************
b)创建hash表
*****************************************/
HASH_TABLE * create_hash_table()
HASH_TABLE* pHashTbl = (HASH_TABLE*)malloc(sizeof(HASH_TABLE));
memset(pHashTbl,0,sizeof(HASH_TABLE));
return pHashT
/****************************************
c)在hash表当中寻找数据
*****************************************/
NODE * find_data_in_hash(HASH_TABLE* pHashTbl,int data)
if (NULL == pHashTbl)
return NULL;
/*获得HASH表索引,为NULL则直接返回NULL*/
if (NULL == (pNode = pHashTbl-&value[data%10]))
return NULL;
/*在该索引下的单链表中查找节点*/
while(pNode)
if ( data == pNode-&data)
/*找到节点就返回当前节点*/
/*当前节点不是,指向下一节点*/
pNode = pNode-&
/*没找到返回NULL,不过在这返回没有意义*/
//return NULL;
/****************************************
d)在hash表当中插入数据
*****************************************/
STATUS insert_data_into_hash(HASH_TABLE* pHashTbl,int data)
if (NULL == pHashTbl)
return FALSE;
if (NULL == pHashTbl-&value[data%10])
pNode = (NODE*)malloc(sizeof(NODE));
memset(pNode,0,sizeof(NODE));
pNode-&data =
pHashTbl-&value[data%10] = pN
return TRUE;
if (NULL == find_data_in_hash(pHashTbl,data))
return FALSE;
pNode = pHashTbl-&value[data%10];
while(pNode-&next)
pNode = pNode-&
pNode-&next = (NODE*)malloc(sizeof(NODE));
memset(pNode-&next,0,sizeof(NODE));
pNode-&next-&data =
return TRUE;
/****************************************
e)从hash表中删除数据
*****************************************/
STATUS delete_data_from_hash(HASH_TABLE* pHashTbl,int data)
if (NULL == pHashTbl || NULL == pHashTbl-&value[data%10])
return FALSE;
if (NULL == (pNode = find_data_in_hash(pHashTbl,data)))
return FALSE;
if (pNode == pHashTbl-&value[data%10])
pHashTbl-&value[data%10] = pNode-&
pHead = pHashTbl-&value[data%10];
while(pNode != pHead-&next)
pHead = pHead-&
pHead-&next = pNode-&
free(pNode);
return TRUE;
/****************************************
f)打印hash表中所有数据
[Hash idx]
0-------------NULL
1-------------1 251
2-------------22
3-------------123 43
4-------------NULL
5-------------55 15 235 525 725 275 545
6-------------NULL
7-------------257
8-------------NULL
*****************************************/
VOID print_hash_data(HASH_TABLE* pHashTbl)
if (NULL == pHashTbl)
printf(&ERROR:The hash is NULL\n&);
if (NULL == (pNode = pHashTbl-&value[10]))
printf(&ERROR:The hash node is NULL\n&);
printf(&[Hash idx]
[value]\n&);
%d-------------&,i);
if (NULL == pHashTbl-&value[i])
printf(&NULL\n&);
pNode = pHashTbl-&value[i];
while(pNode)
printf(&%d &,pNode-&data);
pNode = pNode-&
printf(&\n&);
} while (i&10);
printf(&\n&);
int main()
HASH_TABLE* pHashTbl = create_hash_table();
(VOID)insert_data_into_hash(pHashTbl,22);
(VOID)insert_data_into_hash(pHashTbl,22);
(VOID)insert_data_into_hash(pHashTbl,123);
(VOID)insert_data_into_hash(pHashTbl,436);
(VOID)insert_data_into_hash(pHashTbl,55);
(VOID)insert_data_into_hash(pHashTbl,157);
(VOID)insert_data_into_hash(pHashTbl,235);
(VOID)insert_data_into_hash(pHashTbl,256);
(VOID)insert_data_into_hash(pHashTbl,525);
(VOID)insert_data_into_hash(pHashTbl,724);
(VOID)insert_data_into_hash(pHashTbl,278);
(VOID)insert_data_into_hash(pHashTbl,209);
(VOID)insert_data_into_hash(pHashTbl,67);
(VOID)insert_data_into_hash(pHashTbl,54);
(VOID)insert_data_into_hash(pHashTbl,546);
(VOID)insert_data_into_hash(pHashTbl,350);
(VOID)insert_data_into_hash(pHashTbl,101);
(VOID)insert_data_into_hash(pHashTbl,23);
print_hash_data(pHashTbl);
(VOID)delete_data_from_hash(pHashTbl,55);
print_hash_data(pHashTbl);
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:54805次
积分:1180
积分:1180
排名:第16034名
原创:58篇
转载:11篇
评论:59条
(1)(1)(4)(2)(8)(8)(4)(11)(4)(7)(4)(3)(1)(5)(6)(1)求高手指点!一点电脑基础都没有的想学C语言从哪里学起同时英语也不怎样。。。_百度知道
求高手指点!一点电脑基础都没有的想学C语言从哪里学起同时英语也不怎样。。。
提问者采纳
参考 于轻言三五世——《十八春》
其他类似问题
要基本知识懂行,C语言逻辑性比较强科,数要求高些,特别算,编程要涉及算,数基础,问题,至于英语,要求高,英语绩及格行,C语言关键字限,要记住,积累,必担,重要要兴趣.
按默认排序
其他3条回答
谭浩强版教材比较通俗易懂清华版点电脑基础都度解恐怕理解面点困难建议些简单电脑入门基础知识
找谭浩强的C语言教程来看吧,那个是国内比较经典的。
c语言的相关知识
您可能关注的推广回答者:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C语言 新手 图中有几个圈出来不解的地方,求 高手逐一指点一下 谢谢 秒回秒回啊 在线等_百度知道
C语言 新手 图中有几个圈出来不解的地方,求 高手逐一指点一下 谢谢 秒回秒回啊 在线等
提问者采纳
首先 主函数(main)面z函数(power)z同变量(虽名字)两函数面任意换其名称比abz=x 意思主函数(main)面变量x值传递函数(power)并赋值给函数变量z;=xz没值(再声明z主函数面z)while(y)
y表达式看惯已结束条件y=0while括号面值真永远执行z*=x
其实种简写相于 z=z*x 疑问请追问
提问者评价
z=x我可以理解为当y=1吧(这是一道求次方的题)
其他类似问题
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁c语言,build过不了,主要是设计一个函数process。在调用它的时候,每次实现不同的功能。求高手指点!_百度知道
c语言,build过不了,主要是设计一个函数process。在调用它的时候,每次实现不同的功能。求高手指点!
#include&stdio.h&void main(){ int process();
process();}void process(){ int a,b; int max(int a,int b,int *c); int min(int a,int b,int *c); int add(int a,int b,int *c); int plus(int a,int b,int *c); printf(&please input a,b:&); scanf(&%d%d&,&a,&b); max(a,b,&c); printf(&%d\n&,c); min(a,b,&c); printf(&%d\n&,c); add(a,b,&c); printf(&%d\n&,c); plus(a,b,&c); printf(&%d\n&,c);}void max(int n,int m,int *t){ if(n&m)
*t=n; else *t=m;}void min(int n,int m,int *t){ if(n&m)
*t=n; else *t=m;}void add(int n,int m,int *t){ *t=n+m;}void plus(int n,int m,int *t){ if(n&m)
*t=n-m; else *t=m-n;}
提问者采纳
int _tmain(int argc, _TCHAR* argv[]){ void process();//====仔细看我 process(); return 0;}void process(){ int a,b; void max(int a,int b,int *c);
//====仔细看我 void min(int a,int b,int *c);//====仔细看我 void add(int a,int b,int *c);//====仔细看我 void plus(int a,int b,int *c);//====仔细看我 printf(&please input a,b:&);
能不能帮我写出一个能运行的程序呢?再帮我解释解释,谢谢
大哥呀,我不是都帮你改了吗,我把改的那几行,还都加了注释,你看不到?我回复你那个就是能运行的,你好好看看,再好好看看
提问者评价
虽然还是看不懂,不过还是谢谢你的帮助
其他类似问题
按默认排序
其他3条回答
process函数面能再定义函数#include&stdio.h&int process(); int max(int a,int b,int *c); int min(int a,int b,int *c); int add(int a,int b,int *c); int plus(int a,int b,int *c); printf(&please input a,b:&);void main(){
process();}void process(){ int a,b; scanf(&%d%d&,&a,&b); max(a,b,&c); printf(&%d\n&,c); min(a,b,&c); printf(&%d\n&,c); add(a,b,&c); printf(&%d\n&,c); plus(a,b,&c); printf(&%d\n&,c);}void max(int n,int m,int *t){ if(n&m)
*t=n; else *t=m;}void min(int n,int m,int *t){ if(n&m)
*t=n; else *t=m;}void add(int n,int m,int *t){ *t=n+m;}void plus(int n,int m,int *t){ if(n&m)
*t=n-m; else *t=m-n;}
不对啊,运行都不行了
#include&stdio.h&int process(); int max(int a,int b,int *c); int min(int a,int b,int *c); int add(int a,int b,int *c); int plus(int a,int b,int *c);void main(){
process();}void process(){ int a,b; printf(&please input a,b:&); scanf(&%d%d&,&a,&b); max(a,b,&c); printf(&%d\n&,c); min(a,b,&c); printf(&%d\n&,c); add(a,b,&c); printf(&%d\n&,c); plus(a,b,&c); printf(&%d\n&,c);}void max(int n,int m,int *t){ if(n&m)
*t=n; else *t=m;}void min(int n,int m,int *t){ if(n&m)
*t=n; else *t=m;}void add(int n,int m,int *t){ *t=n+m;}void plus(int n,int m,int *t){ if(n&m)
*t=n-m; else *t=m-n;}
你给c赋一个初值!按照你的程序,当process调用加减乘除是窜送过去的c的地址是随机的。还有就是把调到下面紧挨printf
只是拿财富值,谢谢
process的相关知识
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁关于C语言的问题。求高手指点。_百度知道
for(i=0;i&10;i++)fgets(b[i],11,fp);//herefclose(fp);for(i=0;i&10;i++)//hereprintf(&%s\n&,b[i]);
其他类似问题
c语言的相关知识
按默认排序
其他1条回答
把fgets(b[i],10,fp);改为fgets(b[i],11,fp);再试试
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 c语言 的文章

 

随机推荐