No.1918![]() |
リストに対し操作を行う 投稿者---ses(2004/06/04 16:45:56) |
||
キーボードから行いたい操作を選択してリストの操作を 行うプログラムを作っているのですが。 /* //pが指すセルの次にxのセルを追加 struct cell *insert(int x, struct cell *p, struct cell *init) { struct cell *p *r; r = (struct cell *)malloc(sizeof(struct cell)); if(p == NULL) {q = init; init = r;} else {q = p->next; p->next = r;} r->element = x;r->next = q; return(init); このような感じでやってるのですが locate 要素xの位置を返す find i番目のセルの内容を返す last リストの最後の位置を返す display リストの要素を順に表示する ・・・の操作プログラムがわかりません。 はじめてで多いですがよろしくお願いします |
No.1919![]() |
Re:リストに対し操作を行う 投稿者---あかま(2004/06/04 18:49:30) |
||
リスト操作は基本的に同じなので、過去ログ見たほうが早いですよ。 あと、一行に2文書くのは必要がなければ止めた方がいいです。 見難いので。 貼り付けるプログラムは長くなってもOKですので。 |
No.1932![]() |
Re:リストに対し操作を行う 投稿者---RAPT(2004/06/05 02:13:03) |
||
仕様が分からないからテキトーに。 Windows2000sp4/VC++6.0sp6/Console-App #include <stdio.h> #include <stdlib.h> #define NOT_FOUND (-1) typedef struct cell{ struct cell *next; int element; } CELL; // 要素xの位置を返す CELL* locate(CELL* init, int x) { CELL* ptr = init; while( ptr && ptr->element != x ){ ptr = ptr->next; } return ptr; } // i番目のセルの内容を返す int find(CELL* init, int i) { CELL* ptr = init; for(; ptr && i > 0; --i){ ptr = ptr->next; } return ptr ? ptr->element : NOT_FOUND; } // リストの最後の位置を返す CELL* last(CELL* init) { CELL* ptr = init; while( ptr->next ){ ptr = ptr->next; } return ptr; } // リストの要素を順に表示する void display(CELL* init) { CELL* ptr = init; int i = 0; for(; ptr; ++i ){ printf("[%3d] %3d\n", i, ptr->element); ptr = ptr->next; } } //pが指すセルの次にxのセルを追加 CELL* insert(CELL* init, CELL* p, int x) { CELL* r = (CELL*)malloc(sizeof(CELL)); if(r == NULL){ perror(NULL); exit(1); } r->element = x; if(p == NULL){ r->next = init; init = r; }else { r->next = p->next; p->next = r; } return init; } void term(CELL* init) { CELL* ptr = init; while( ptr ){ init = init->next; free(ptr); ptr = init; } } int main() { CELL* init = {0}; init = insert(init, NULL, 3); init = insert(init, init, 75); init = insert(init, init, 12); init = insert(init, init, 48); display(init); printf("find(1) = %d\n", find(init, 1)); term(init); return 0; } |
No.1933![]() |
Re:リストに対し操作を行う 投稿者---ses(2004/06/05 04:37:11) |
||
あかまさん> ありがとうございます、過去ログも見通したのですがキーワードの選択間違ったかなぁ過去ログはこれからよく見るから慣れないとな・・・ RAPTさん> うあ・・・こんなに詳しく・・・ 最初からポインタのことについてよくわからなかったので一行ずつ確かめていきたいと思います、ありがとうございました |