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

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

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

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

解決済

C言語でのチェイニング法によるハッシュの昇順にするには。

yukihirotahu
yukihirotahu

総合スコア0

C

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

1回答

0評価

0クリップ

6閲覧

投稿2020/07/09 11:38

C言語のチェイニング法でハッシュの問題なのですが、このコードを昇順に書き出すようにするにはどうすればよいのでしょうか?
ここのinsert部分を変えて昇順になるようにしたいのですがどうすればよいでしょうか?
いくつかやってみたのですが、できませんでした。どなたかお助けください、、

C言語

#include <stdio.h> #include <stdlib.h> #define m 12 /* 配列サイズ*/ /* リストの基本操作 */ struct element { int data; struct element *next; }; struct element *newl() /* メモリー上にセルの領域を確保 */ { return((struct element *) malloc(sizeof(struct element))); } struct element *create() /* 空リストを生成 */ { struct element *p; p = newl(); /* create(1) */ p->next = NULL; /* create(2) */ return(p); /* create(3) */ } void insert(struct element *list, int k, int x) /* リストのk番目にxを挿入 */ { struct element *p; if (k > 1) /* insert(1) */ insert(list->next, k-1, x); /* insert(2) */ else { /* insert(3) */ p = newl(); /* insert(4) */ p->data = x; /* insert(5) */ p->next = list->next; /* insert(6) */ list->next = p; /* insert(7) */ } } int member(struct element *list, int x) /* リスト中にxがあるかを判定 */ { if(list->next == NULL) /* member(1) */ return 0; /* member(2) */ if(list->next->data == x) /* member(3) */ return 1; /* member(4) */ else /* member(5) */ member(list->next, x); /* member(6) */ } void deleteall(struct element *list, int x) /* リストから整数xをすべて削除する*/ { if (list->next == NULL) /* deleteall(1) */ return; /* deleteall(2) */ if (list->next->data == x){ /* deleteall(3) */ list->next = list->next->next; /* deleteall(4) */ deleteall(list, x); /* deleteall(5) */ } else /* deleteall(6) */ deleteall(list->next, x); /* deleteall(7) */ } void printlist(struct element *list) /* リスト内のデータををすべて印刷する*/ { if(list->next != NULL){ /* printlist(1) */ printf(" %d", list->next->data); /* printlist(2) */ printlist(list->next); /* printlist(3) */ } } /* ハッシュ表の基本操作 */ int hash(int x) /* ハッシュ関数 */ { return(x % m); /* hash(1) */ } void initializehash(struct element *a[]) /* ハッシュ表の初期化 */ { int i; /* initializehash(1) */ for (i = 0;i <= m-1; i++) /* initializehash(2) */ a[i] = create(); /* initializehash(3) */ } void inserthash(struct element *a[], int x) /* ハッシュ表にxを挿入 */ { insert(a[hash(x)],1,x); /* inserthash(1) */ } void deletehash(struct element *a[], int x) /* ハッシュ表からxを削除する */ { int i; for (i = 0; i < m; i++) /* deletehash(1) */ deleteall(a[i], x); /* deletehash(2) */ } int memberhash(struct element *a[], int x) /* ハッシュ表にxがあるかを判定 */ { return(member(a[hash(x)], x)); /* memberhash(1) */ } void printhash(struct element *a[]) /* ハッシュ表を印刷する */ { int i; for (i = 0; i < m; i++){ /* printhash(1) */ printf("H[%d",i); /* printhash(2) */ printf("] = "); /* printhash(3) */ printlist(a[i]); /* printhash(4) */ printf("\n"); /* printhash(5) */ } } int main() { int x; struct element *a[m]; initializehash(a); /* main(1) */ printf("Next integer(0:end) = "); /* main(2) */ scanf("%d", &x); /* main(3) コンソールから整数xを読みこむ */ while (x != 0) { /* main(4) */ inserthash(a, x); /* main(5) ハッシュ表に挿入する */ printf("Next integer(0:end) = "); /* main(6) */ scanf(" %d", &x); /* main(7) */ } printhash(a); /* main(8) */ printf("Member integer(0:end) = "); /* main(9) */ scanf("%d", &x); /* main(10) コンソールから整数xを読みこむ */ while (x != 0) { /* main(11) */ printf("%d", memberhash(a, x)); /* main(12) 1:ハッシュ表にxがある 0:ない */ printf("\nMember integer(0:end) = "); /* main(13) */ scanf(" %d", &x); /* main(14) */ } printhash(a); /* main(15) */ printf("Delete integer(0:end) = "); /* main(16) */ scanf("%d", &x); /* main(17) コンソールから整数xを読みこむ */ while (x != 0) { /* main(18) */ deletehash(a, x); /* main(19) ハッシュ表からxを削除する */ printhash(a); /* main(20) */ printf("Delete integer(0:end) = "); /* main(21) */ scanf(" %d", &x); /* main(22) */ } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。