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

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

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

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

受付中

条件に合うセルを探すプログラムを追加するのだが、何日も解決できず助けてほしい。

sakippe
sakippe

総合スコア21

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

0回答

0評価

0クリップ

113閲覧

投稿2022/06/26 09:18

struct cell *search(int val)
連結リストを先頭から順に辿り,引数に指定した値valをもつセルへのポインタを返す.連結リスト中にvalをもつセルが複数存在する場合は,先頭に近いセルへのポインタを返す.また,連結リスト中にvalをもつセルが存在しない場合はNULLを返す.

という関数を追加するのですが何日もこの問題4日もこの問題で止まっています。自分でも考えてみたのですがなかなかできず困っています。助けてください。よろしくお願いします。

C

#include <stdio.h> #include <stdlib.h> /*連結リストのセルを定義する*/ struct cell{ int value; /*このセルが持つデータ*/ struct cell *next; /*次のセルを指すポインタ*/ }; /*連結リストの先頭を指すダミーセル.今回はvalueメンバの値を-1にする*/ struct cell gFront = {-1,NULL}; /*連結リストを表示する関数*/ void printList(void){ struct cell *p; /*セルを1つずつ辿りながらそのセルの内容を表示する*/ printf("LIST[ "); /*通常,ダミーセルは連結リストの一部には含めません. *ダミーセルの次のセルが連結リストの先頭になります. */ p = gFront.next; while(p != NULL){ printf("%d ", p->value); p = p->next; } printf("]\n"); } struct cell *search(int val){ struct cell *p; int count=0; p = gFront.next; while(p != NULL){ if(p->value <= val){ count++; if(count > 0){ return p->next; } }else if(p->value >= val){ count++; if(count > 1){ return gFront.next; } }else if(p->value <= gFront.value){ return NULL; } p = p->next; } return 0; } int main(void){ int a; struct cell *p; int val; scanf("%d", &a); while(a >= 0){ p = malloc(sizeof(struct cell)); if(p == NULL){ fprintf(stderr, "エラー:maiioc失敗"); exit(1); } p->value = a; /****************************/ /*連結リストの先頭に追加する*/ /****************************/ /*(1)まず,新しいセルが今の先頭のセルを指すようにする*/ p->next = gFront.next; /*(2)次に,ダミーセルが新しいセルを指すようにする*/ gFront.next = p; printList(); scanf("%d", &a); } printf("入力を終了しました\n"); printf("探す値を入力して下さい:"); scanf("%d", &val); p = search(val); if(p == NULL){ printf("%d以下をもつセルはありません\n", val); }else{ printf("%d以下をもつセルはあります\n", val); printf("pが指すセルのvalueは%dです\n", p->value); } return 0; }

実行例は以下のようになります
40 30 20 10 -1 #逆順になることを見越して最初から逆順に入力
LIST[ 40 ]
LIST[ 30 40 ]
LIST[ 20 30 40 ]
LIST[ 10 20 30 40 ] #先頭に挿入していくので入力の逆順になる
入力を終了しました
探す値を入力してください: 30 #連結リストの中央付近にある値を指定
30をもつセルはあります
pが指すセルのvalueは30です

40 30 20 10 -1 #キーボード入力
LIST[ 40 ]
LIST[ 30 40 ]
LIST[ 20 30 40 ]
LIST[ 10 20 30 40 ]
入力を終了しました
探す値を入力してください: -1 #ダミーセルがもつ値を指定
-1をもつセルはありません #ダミーセルは連結リストではないので
#探索対象に含めていないことを確認する

40 30 20 10 -1 #キーボード入力
LIST[ 40 ]
LIST[ 30 40 ]
LIST[ 20 30 40 ]
LIST[ 10 20 30 40 ]
入力を終了しました
探す値を入力してください: 10 #連結リストの先頭セルの値を指定
10をもつセルはあります
pが指すセルのvalueは10です

40 30 20 10 -1 #キーボード入力
LIST[ 40 ]
LIST[ 30 40 ]
LIST[ 20 30 40 ]
LIST[ 10 20 30 40 ]
入力を終了しました
探す値を入力してください: 40 #連結リストの末尾セルの値を指定.
40をもつセルはあります
pが指すセルのvalueは40です

40 30 20 10 -1
LIST[ 40 ]
LIST[ 30 40 ]
LIST[ 20 30 40 ]
LIST[ 10 20 30 40 ]
入力を終了しました
探す値を入力してください: 25 #連結リストに存在しない値を指定
25をもつセルはありません

-1 #空の連結リストを作成
入力を終了しました
探す値を入力してください: 10
10をもつセルはありません

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

Zuishin

2022/06/26 10:03

最近 Objective-C が流行ってるんですか?

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。