質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

860閲覧

ハッシュ(チェイン法について)

masuter0413

総合スコア50

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2019/06/08 07:47

学生番号と氏名をファイルから読み込み,ハッシュテーブルに登録するプログラムを作っています.
現在,次のようなところまで書いています.テーブルの内容を表示しようとしてもなかなかうまくいかないのですが,まず,構造体の定義はこれで大丈夫でしょうか.
キーは名前でデータは学生番号です.

txt

1F1601 田中萌 2F1602 木山大樹 3F1603 古味翔子

c

1#include <stdio.h> 2#include<stdlib.h> 3#include<string.h> 4 5typedef char KEY; 6typedef char DATA; 7 8 9#define SIZE 50 10#define NUM 256 11 12typedef struct cell { 13 KEY key; 14 DATA data; 15 struct cell *next; 16}CELL; 17 18CELL *table[SIZE]; 19 20void init() { 21 for (int i = 0; i < SIZE; i++) { 22 table[i] = NULL; 23 } 24} 25 26 27int hash(KEY*p) { 28 int i = 0; 29 while (*p != '\0') { 30 i += *p++; 31 } 32 return abs(i % SIZE); 33} 34 35int keyequal(KEY*a, KEY*b) { 36 if (hash(a) - hash(b) == 0) return 1; 37 return 0; 38} 39 40DATA *search_cell(KEY*key) { 41 CELL *p; 42 for (p = table[hash(key)]; p != NULL; p = p->next) { 43 if (keyequal(key, &p->key)) { 44 return &p->data; 45 46 } 47 } 48 return NULL; 49} 50 51 52 53int insert_cell(KEY*key, DATA *data) { 54 CELL *p; 55 int h; 56 if (search_cell(key) != NULL)return 0; 57 if ((p = (CELL*)malloc(sizeof(CELL))) == NULL) 58 { 59 printf("Error\n"); 60 exit(2); 61 } 62 h = hash(key); 63 p->key = *key; 64 p->next = table[h]; 65 table[h] = p; 66 return 1; 67 68 return 1; 69} 70 71 72 73int main() { 74 int i; 75 int str; 76 FILE*fp; 77 fp = fopen("J16meibo.txt", "r"); 78 KEY key[NUM]; 79 DATA data[NUM]; 80 81 for (i = 0;; i++) { 82 str = fscanf(fp, "%s %s", data, key); 83 if (str == EOF)break; 84 insert_cell(key, data); 85 } 86 return 0; 87}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まず,構造体の定義はこれで大丈夫でしょうか.

C

1typedef char KEY; 2typedef char DATA; 3 4typedef struct cell { 5 KEY key; 6 DATA data; 7 struct cell *next; 8}CELL;

keydata には、一文字(1byte)づつしか入りませんが、それで良い? でしょうか。

他はまだ見てませんが、まず、ここから、問題と思います。

投稿2019/06/08 07:56

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問