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;
    }
    
  • 相关阅读:
    利用Flot作基于时间段的曲线图
    Linux Apache使用CGI
    Windows node.js安装运行npm显示类似"ENOENT, stat 'C:UsersXXXXAppDataRoaming pm'错误
    JavaWeb返回Json格式数据JQuery Ajax无法解析的问题
    C++ 14 auto
    [原创] Jenkins slave agent 分布式构建
    [原创] Jenkins 邮件配置 (使用 Jenkins Email Extension Plugin)
    Linux 域名服务器配置
    证书管理
    Ubuntu 安装 Kubernetes
  • 原文地址:https://www.cnblogs.com/zhou2011/p/2662817.html
Copyright © 2011-2022 走看看