您的位置:首页 > 其它

利用哈希表的原理,找到一个字符串中第一次出现的一次的字符

2012-08-29 22:23 288 查看
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char checkFirstChar(char *stringSrc)
{
char *ptr = stringSrc;
int arraryHash[255];
memset(arraryHash,0,sizeof(int)*255);
while (*ptr != '\0')
{
arraryHash[*ptr]++;
ptr++;
}
int index = 0;
while (index < 255)
{
if (arraryHash[index] == 1)
return (char)index;
index++;
}
}

int main(int argc, char *argv[])
{
char *sourceString = "abcdabce";
printf("%c\n",checkFirstChar(sourceString));
return 0;
}


今天在看一道C语言编程题。

哈希表Hash也称散列表,是根据关键码值key value而直接进行访问的数据结构。即,它通过把关键码值隐射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫散列表。

定义hash表和基本数据结点:

typedef struct Node
{
int data;
struct Node * next;
}Node;

typedef struct HashTable
{
Node *value[10];
}HashTable;


创建一个Hash表:

HashTable *CreateHashTable()
{
HashTable *pHashTbl = (HashTable *)malloc(sizeof(HashTable));
memset(pTH, 0, sizeof(HashTable));
return pHashTbl
}


找出一个字符串中第一个只出现一次的字符。

分析:利用和哈希表的原理差不多的思路,就是创建一个表,储存每个字符出现的次数,然后遍历这个表直到找到第一次出现的一次的那个字符。

关于哈希表的大小,因为ASCII表的大小是255,因此数组的长度为255(arrayHash[255])

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char checkFirstChar(char *stringSrc)
{
char *ptr = stringSrc;
int arraryHash[255];
memset(arraryHash,0,sizeof(int)*255);
while (*ptr != '\0')
{
arraryHash[*ptr]++;
ptr++;
}
int index = 0;
while (index < 255)
{
if (arraryHash[index] == 1)
return (char)index;
index++;
}
}

int main(int argc, char *argv[])
{
char *sourceString = "abcdabce";
printf("%c\n",checkFirstChar(sourceString));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐