417 :
デフォルトの名無しさん :
2014/02/13(木) 01:46:34.35 c言語の課題出されました。リスト構造の問題です。 struct node {int elem;struct node *next;}; struct node *list; 問1、中央のセルのポインタを返す関数list midcell(list L)を定義してください。 条件は単方向リストで。また中央のセルとは末尾のセルを除いて考えセルの個数が 2N個の場合N番目のセルのことをいいます。 よろしくお願いします。
418 :
デフォルトの名無しさん :2014/02/13(木) 01:49:38.19
続きです 問2、連結リストLとその途中のセルのポインタMが与えられたとき 先頭LからMの直前のセルまでを切り離し順序を逆転させリストを返す関数 list revfR(list L,list M)を再帰関数で定義してください。 リストLは空でないと仮定します。また本問も単方向リストでお願いします。 問3、問2の機能を持つ関数list revf(list L,list M)を再帰関数を用いず定義してください よろしくお願いします。
>>418 >先頭LからMの直前のセルまでを切り離し順序を逆転させリスト
よくわからん
123456のリストでL=1、M=4 だったらどうなればよいの?
321456?
321?
654?
420 :
デフォルトの名無しさん :2014/02/13(木) 04:55:56.72
>>402 おれ独学だけど、完全な独学とはいえない。雑誌(Cマガジンとか)
パソコン通信は、顔がみえないから、こわいひともいた。いろんなひとがいた
421 :
デフォルトの名無しさん :2014/02/13(木) 04:56:51.34
2ちゃんねるは、雑音がおおすぎるから、やめたほうがいいよ
>>417 1問目だけやってみた。
ちなみにコンパイルは通してない。
node* midcell(list* argList, int argSize)
{
int i;
node* pRetNode = pList;
int iLen = argSize / 2;
for(i = 0; i < iLen; i++){
pRetNode = pRetNode->next;
}
return pRetNode;
}
423 :
422 :2014/02/13(木) 05:26:12.38
修正 typedef struct node{int elem; struct node *next;}NODE; NODE* midcell(NODE* argList, int argSize) { int i, iLen; NODE* pRetNode; pRetNode = pList; iLen = argSize / 2; for(i = 0; i < iLen; i++){ pRetNode = pRetNode->next; } return pRetNode; }
こういうのはどうかね node* midcell(list* top) { node *n, *r; int f=0; for(n=r=top; n!=0; n=n->next, f=!f) { if(f) r=r->next; } return r; } もちろんコンパイルもテストもしてない
つ(3) list *p, *q, *R, S[100], int i = 0; for (p = L; p->next != M; p = p->next) if (p->next == NULL) return (list)NULL; for (; p->next; S[i++] = p = p->next) if (p->next == M) return (list)NULL; for (R = S[--i]; p != M; q = S[--i], p->next = q->next, p = q) if (i == 0) return (list)NULL; p->next = NULL; return R; もちろんコンパイルもテストもしてない
426 :
デフォルトの名無しさん :2014/02/13(木) 11:07:10.40
>>419 321になります。
また関数の引数の個数は問題と同じで数でお願いします