【问题标题】:hash table program that will take the first character of a string将获取字符串的第一个字符的哈希表程序
【发布时间】:2020-07-04 23:27:27
【问题描述】:

我需要制作一个哈希表程序,它将以小写字母形式获取字符串的第一个字符,并将 ASCII 与用户输入的哈希表的大小取模。我应该在哪里输入尺寸而不是主要?

这些是我当前的代码。在这段代码中,我要求用户在主模块函数中输入大小,但我对如何在除 main 之外的每个函数中使用它感到困惑。任何帮助表示赞赏。

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




struct data
{
    char name [100];
    char age[2];
    struct data *next;
};

struct data *chain[size] = {NULL};

struct data* insert(char name[], char age[]){
    struct data *curr = (struct data*) malloc (sizeof(data));
    strcpy(curr->name, name);
    printf("input name: ");
    scanf(" %[^\n]s",strcpy(curr->name, name));
    printf("input age: ");
    scanf(" %[^\n]s", strcpy(curr->age, age));
    curr->next = NULL;
    return curr;
};


int main(){
    int n;
    char name[100]; 
    char age[2];
    char firstChar;
    int key;
    int index = 0;

    printf("input the number of hash table: ");
    scanf("%d", &n); getchar();
    printf("\n");


    int option;
    do{
        printf("=== Option Menu ===\n");
        printf("1. insert data\n");
        printf("2. delete data\n");
        printf("3. search data\n");
        printf("4. view data\n");
        printf("5. exit\n");
        printf("input option: ");
        scanf("%d", &option); getchar();

        switch(option){
            case 1:
                insert(name,age);
                break;
        }
    }while(option!=5);
}

【问题讨论】:

  • 全球化。
  • age 太小,除非你只使用年龄
  • 所以我只需要输入 int n;在全球范围内?
  • scanf(" %[^\n]s",strcpy(curr-&gt;name, name)); 的用途是什么,是的,将n 放在全局范围内。
  • 我需要在这个哈希表程序中使用链表。但它给了我 [Error] array bound is not an integer constant before ']' token?

标签: c hash hashtable


【解决方案1】:

我可以使哈希表的大小动态吗?

是的,你可以,甚至需要这样做,因为你写了“我需要制作一个哈希表程序......具有用户输入的哈希表的大小”。为此,不要定义struct data *chain[size] = {NULL};,而是定义struct data **chain;,并在main 中输入n 之后做

    chain = calloc(n, sizeof *chain);

【讨论】:

  • 感谢您的回答。但是为什么我会收到一条错误消息,提示 [Error] invalid conversion from 'void*' to 'data**' [-fpermissive]?
  • 您收到此错误是因为您使用的是 C++ 而不是 C 编译器。
  • 顺便说一句,你必须写sizeof (struct data)而不是sizeof(data)
猜你喜欢
  • 2011-10-29
  • 1970-01-01
  • 2010-10-14
  • 2021-12-23
  • 2013-12-19
  • 2019-07-29
  • 2011-03-26
  • 2012-11-10
相关资源
最近更新 更多