• 締切済み

C言語の問題について

#include <stdio.h> #define NMAX 20 struct node_tag { ??????? }; int main(void) { ??????? struct node_tag *p; int i; for (???????) { ??????? } p = ???????; while (p!=NULL){ printf("%d %s\n", ???????, ???????); p = ??????? } return 0; } 「 日付(整数) と 曜日名(文字) と 次の要素を指すポインタ 」を要素に持つ自己参照構造体 struct note_tag を定義して、この構造体を利用して線形リストを作成し,日付と曜日を表示させるプログラムを作成したいのですが?がわからなくて困ってます・・・どうか教えてください

  • hp00
  • お礼率0% (0/2)

みんなの回答

  • arain
  • ベストアンサー率27% (292/1049)
回答No.1

抜けているところかすると、課題の丸投げかなにかでしょうか? >「 日付(整数) と 曜日名(文字) と 次の要素を指すポインタ 」を要素に持つ自己参照構造体 struct note_tag を定義して、 struct note_tagの中に、 ・日付(整数) ・曜日名(文字) ・次の要素を指すポインタ  を定義してください。 >この構造体を利用して線形リストを作成し, おそらくfor()のあたりでしょう。 >日付と曜日を表示させるプログラムを作成したい printf()で必要な値を表示してください。 とりあえず「リスト構造」って言葉知ってますか?

関連するQ&A

  • C言語 リスト

    (1) /* list.c */ #include <stdio.h> #include <stdlib.h> struct node { int num; struct node *next; }; main() { struct node *head, *p; int x; head = NULL; while(scanf("%d",&x) != EOF) { p = (struct node *)malloc(sizeof(struct node)); p->num = x; p->next = head; head = p; } // リストの要素のnumの値を先頭から順に表示する p=head; while(p!=NULL) { printf("%d\n" ,p->num); p = p->next; } } (2) struct node *q; q = head; while(q->next != NULL) q = q->next; (1)を(2)を使い新しいノードをリストの最後に追加するようにしたいのですが どう書いたら良いのか教えていただきたいです

  • C言語の構造体についてなんですが。

    struct LIST {     struct Num* number;     struct LIST* next;/* 次の要素へのポインタ */ }*root; struct Num{     int a;     struct Num* next; /* 次の要素へのポインタ */ }*numroot; と構造体を定義したときに、 main(){     struct LIST *p;     for(p = root; p != NULL; p = p->next) ; } とすれば、pの先頭からNULLまでを参照していくことは分かるんですが、pのnumberの先頭からNULLまでの参照方法(プログラムのfor文の記述方法)がイマイチわかりません。つまり、構造体の構造体をどのように参照するかということです。 これを実現したい理由は、構造体内での数の格納を配列(固定長)ではなく可変長で格納したいからです。 分かる方は解答をお願いします。

  • C言語解読

    #include <stdio.h> #include <stdlib.h> #include <string.h> #define dBufferSize (32768) #define dPrintFmt "#d: %s\n" typedef struct _NODE NODE; struct _NODE { char *line; NODE *next; }; int RemoveReturnCode(char *string); NODE *MakeNode(char *string); int FreeNodeList(NODE *node); void FreeNode(NODE *node); int PrintNoceList(NODE *node); NODE *ReverseNodeList(NODE **head); int main(void){ char buffer[dBufferSize]; NODE *head = NULL; while (fgets(buffer, dBufferSize, stdin) != NULL){ NODE *pivot; RemoveReturnCode(buffer); pivot = MakeNode(buffer); if (pivot == NULL) return FreeNodeList(head); pivot->next = head; head =pivot; } PrintNodeList(head); ReverseNodelist(&head); PrintNodeList(head); FreeNodeList(head); return 0; } int RemoveReturnCode(char *str){ char *p; if (str == NULL) return -1; for (p = str; *p != '\n' && *p != '\r' && *p != '\0'; p++) ; *p = '\0'; return p - str; } NODE *MakeNode(char *str){ NODE *node; if(str == NULL)return NULL; node = (NODE *)calloc(1,sizeof(NODE)); if(node != NULL){ char *p = (char *)calloc(strlen(str)+1, sizeof(char)); if (p != NULL){ node->line = strcpy(p, str); node->next = NULL; } else{ free(node); node = NULL; } } return node; } int FreeNodeList(NODE *node){ int ct = 0; while (node != NULL){ NODE *next = node->next; FreeNode(node); ct++; node = next; } return ct; } void FreeNode(NODE *node){ free(node->line); free(node); } int PrintNodeList(NODE *node){ int ct; for (ct = 0; node != NULL; node = node->next, ct++) printf(dPrintFmt, ct+1, node->line); return ct; } NODE *ReverseNodeList(NODE **head){ NODE *reverse = NULL; NODE *node = *head; while (node != NULL){ NODE *next = node->next; node->next = reverse; reverse = node; node = next; } return *head = reverse; } このプログラムは単方向リストを利用して複数行のデータを格納していくものであるという ものらしいのですが、そのようなヒントがあっても、まったく解読できません、 手も足も出ない状態です。 できれば、初心者に近い私にもわかるように、関数ごとの解説をおねがいします!! エラーがでるかもしれないのですが・・・大体の意味にはかわりないと思いますので、宜しくお願いします!!

  • C言語に関して

    #include <stdio.h> #define NMAX 5 typedef union mixeddata { char status; double data; }MIXD; typedef struct expdata { int flag; MIXD result; ←ここ }EXPD; main() : : : 上のソースの「ここ」と書いてある場所の、result のバイト数はいくつか? と聞かれたのですが、何バイトでしょうか?  回答宜しくお願いします。

  • スケールフリーネットワークをC言語で作成しているのですが。

    現在、C言語でスケールフリーネットワーク(BAモデル)を作成しているのですが、理論はわかるのですが、プログラムが不得意でどのように作っていったらいいのかわかりません。 現在作成途中のソース。 #include<stdio.h> #include<stdlib.h> #include<time.h> #define MAXDEG 500 #define N 30000 //ノードの数 typedef struct node{ int deg; int adj[MAXDEG];//adjacent隣接 double prob;//確率 } Node; /*プロトタイプ宣言*/ add_edge(int id1,int id2); Node NODES[N]; int main(){ ここがどうしていいかわかりません。 } add_edge(int id1,int id2){ Node *node1,*node2; node1 = &NODES[id1]; node2 = &NODES[id2]; node1->adj[node1->deg]=id2; (node1->deg)++; node2->adj[node1->deg]=id1; (node2->deg)++; if(node1->deg >= MAXDEG-1 || node2->deg > MAXDEG-2){ printf("DEG overflow\n"); exit(0); } 関数はこれを使おうと思っていますが、プロセスがわかりません。 よろしくお願いします。

  • C言語初心者です。

    C言語初心者です。 構造体について勉強してるのですが、不明点があるため質問させて頂きます。 ---------------------------------- struct A{ int (*a)(struct B, struct C); int (*b)(struct B, struct C); } ---------------------------------- 上記の処理(構造体の中身)の書式について、書籍などで調べたのですが分かりません。 何を意味しているのでしょうか? ご回答のほど、よろしくお願いします。

  • C言語 自己参照型 複数木構造

    C言語の自己参照型を使用しプログラムを作ろうとしていますが、 2分探索木についての解説、サンプルをのせているサイトは たくさんあり勉強になったのですが、 木が2以上の複数の場合になった場合、どういったプログラムをくめば いいのかわからず、学習したいと思っています。 参考となる、サイト、サンプルを教えていただけないでしょうか? //2分木の場合 struct node{ int nodeID; struct node *nextA; struct node *nextB; } //複数木の場合? struct node{ int nodeID; struct node **next; } のように複数木の場合は、次の木が複数に対応できるように ポインタのポインタを使用するのかと思いますが、 構造体のメンバでポインタのポインタの使用の仕方が いまいち理解できませんでした。 よろしくお願い致します。

  • C言語 経路探索 経路リストの作成

    S→B→C → D →G   ↓  ↓→E→↑   →F→→↑ Start(S)からGoal(G)までのとりうる全経路を自動作成するプログラムを C言語で作成したいです。 上の例だと、 ルート1: SBCDG ルート2: SBCEG ルート3: SBFEG の3つのルートを算出できるプログラムです。 節と節の接続情報は持っているものとします。 S→B B→C C→D D→G C→E E→G B→F F→E struct connectList{ int node1; int node2; } struct root{ int nodeId; int nodeCost; root_t** next; }; 木構造のような構造体で作成していこうとしたのですが、 ひとつのS→Gまでのパスは作成できるのですが、 すべてのパスを求めるにはどうしたらよいのでしょうか? データ構造、プログラムサンプルを教えていただけないでしょうか?

  • c言語の問題について

    飲食店の六月分の帳簿データを book-6.dat がテキストで書かれており、中身を見てみると 20120601 1 meat 125 10000 20120602 1 rice 2000 10 20120603 0 uriage 500 100 20120603 1 beer 140 24 .... となっている。このうち左端から日付、支出/収入、商品名、単価、数量を表している。 ただし、支出は1、収入は0とする。 このファイルを構造体の配列に読み込む関数 void readData(FILE *fp, struct BOOK *book)を完成させたい。(不足部分を補いなさい)。 ただし、book-6.datに書かれてある単価と数量のセットは100セットあることが予め分かっているとする。 #include<stdio.h> #include<stdlib.h> #define FILENAME "book.dat" struct BOOK{ char date[50]; char item[100]; int tanka; int suryou; int ; }; void readData(FILE *fp, struct BOOK *book); int main(){ struct BOOK mybook[100]; int i; FILE *fp; if((fp = open(FILENAME, "r"))==NULL){ fprintf(stderr, "%s cannot be found!\n", FILENAME); exit(1); } readData(fp, mybook); fclose(fp); for(i=0; i<100; i++){ printf("%s : %d x %d\n", mybook[i].item, mybook[i].tanka, mybook[i].suryou); } } void readData(FILE *fp, struct BOOK *book){  //アスキーファイルを読むものとする } よろしくお願いします。

  • ポインタ版リスト構造によるスタックの実装

    C言語を用いてアルゴリズムの勉強をしています。 現在、ポインタ版リスト構造によるスタックを実装し、入力された文字列の中で括弧の整合性を判定するプログラムを作成しているのですが、難航しています。 プログラムの内容は、以下の通りです。 入力:a{z[e(b){j}(p)]w}(j) 結果:整合 入力:a{z[e(b){j}(p)}w](j) 結果:不整合 ですが、所持している参考書の例題プログラムには、スタックに入れる要素が整数値のものしかなく、文字をスタックに入れるところからわかりません。 また、先輩に尋ねたところ、以下のような構造体を使うと良いとアドバイスされました。 typedef struct { int max; int num; List stk; } Stack; typedef struct { Node *head; Node *crnt; } List; typedef struct node { char data; struct node *next; } Node; 先輩には申し訳ないのですが、余計にわからなくなってしまいました。 この構造体を用いてプログラムをかける方、ご指導のほどよろしくお願いします。