zoukankan      html  css  js  c++  java
  • 利用哈希表的原理,找到一个字符串中第一次出现的一次的字符

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <stdlib.h>
     4 
     5 char checkFirstChar(char *stringSrc)
     6 {
     7     char *ptr = stringSrc;
     8     int arraryHash[255];
     9     memset(arraryHash,0,sizeof(int)*255);
    10     while (*ptr != '\0')
    11     {
    12         arraryHash[*ptr]++;
    13         ptr++;
    14     }
    15     int index = 0;
    16     while (index < 255)
    17     {
    18         if (arraryHash[index] == 1)
    19             return (char)index;
    20         index++;
    21     }
    22 }
    23 
    24 int main(int argc, char *argv[])
    25 {
    26     char *sourceString = "abcdabce";
    27     printf("%c\n",checkFirstChar(sourceString));
    28     return 0;
    29 }

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

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

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

     1 typedef struct Node
     2 {
     3     int data;
     4     struct Node * next;
     5 }Node;
     6 
     7 typedef struct HashTable
     8 {
     9     Node *value[10];
    10 }HashTable;

    创建一个Hash表:

    1 HashTable *CreateHashTable()
    2 {
    3     HashTable *pHashTbl = (HashTable *)malloc(sizeof(HashTable));
    4     memset(pTH, 0, sizeof(HashTable));
    5     return pHashTbl
    6 }

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

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

    关于哈希表的大小,因为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;
    }
    
  • 相关阅读:
    例子2.5
    例子2.4
    例子2.3
    例2
    例2.1
    快闪PPT 快速入门教程 脑洞大开,特效随你定 ----口袋动画PA(初学易上手001):
    Linux 基础与应用教程 0011(DNS解析)
    课外阅读记录:001
    好的特效模板
    学习记住并且时常要打开去看的VIM
  • 原文地址:https://www.cnblogs.com/zhou2011/p/2662817.html
Copyright © 2011-2022 走看看