忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2024年05月16日07:23 】 |
必要ないノードの削除処理2
必要ないノードの削除処理を以下のように行ったがメモリーは増大していく。free()した領域は再利用されていないのだろうか?俺のミス・・?回帰処理になんかあるのかな?どうやら、これ以上削れないっぽい。


/*
q->node=101010101010101010101010101010201040404
q->node=10101010101010101010101010101020104040401
q->node=1010101010101010101010101010102010404040101
q->node=101010101010101010101010101010201040404010101
q->node=1010101010101010101010101010102010404040102
q->node=101010101010101010101010101010201040404010201
q->node=1010101010101010101010101010102010404040103
q->node=101010101010101010101010101010201040404010301
q->node=101010101010101010101010101010201040405
q->node=10101010101010101010101010101020104040501       <---D
q->node=1010101010101010101010101010102010404050101     <---A
q->node=101010101010101010101010101010201040405010101   <---B
q->node=101010101010101010101010101010201040405010102   <---B
q->node=1010101010101010101010101010102010404050102     <---C
C地点で、BはCよりもノードが深い(長い)ので削除
Aは長さが同じなので削除。DはCよりも浅いので削除しない。
 
以上を繰り返す。
 
q->node=101010101010101010101010101010201040405         <---G
q->node=101010101010101010101010101010201040405030301   <---F
q->node=10101010101010101010101010101020105             <---E
 
E地点ではFのが長いのでF,G削除
*/
char str2[BUFF_SIZE]; str2[0] = '\0';
char buff[BUFF_SIZE]; buff[0] = '\0';
 
int n_len1 = strlen(n->node);
int n_len2 = 0;
 
if(n != node_top){
// nから遡る
r = (NODE*)n->prev;
n_len2 = strlen(r->node);
if(n_len1 < n_len2){  //直前のノードが自分自身より長い場合に遡る
for(p = r; p !=NULL; ){
q = p;
p = (NODE*)p->prev;
n_len2 = strlen(p->node);
 
if(n_len1 > n_len2){
//深度が浅くなるので削除しない。bottom設定。
node_bottom = p;
p->next = 0;
//自分自身を削除
// printf("%s自分自身削除\n", n->node);
free(n);
break;
}else{
// printf("%s削除\n", p->node);
free(q);
}
}
}
}
 
printf("node view\n");
for(p = node_top; p !=NULL; ){
q = p;
if(p == node_bottom)break;
printf("q->node=%s\n",q->node);
// log3(q->node);
p = (NODE*)p->next;
}

以上の修正で実行
ログresult.txt一部分、104010604までを削除している。


node view
q->node=1
q->node=103
q->node=10303
q->node=1030306
q->node=103030603
q->node=104
q->node=10401
q->node=1040105
q->node=104010507
q->node=10401050705
q->node=1040105070505
q->node=104010507050501
q->node=104010507050502
q->node=104010507050503
q->node=104010507050504
q->node=104010507050505
q->node=104010507050506
q->node=104010507050507
q->node=104010507050508
q->node=1040106
q->node=104010603
q->node=10401060308
q->node=10401060309
q->node=104010604
q->node=10401060401
q->node=1040106040103
q->node=104010604010301
q->node=104010604010302
q->node=104010604010303
q->node=104010604010304
q->node=104010604010305
q->node=104010604010306
q->node=104010604010307
q->node=104010604010308
q->node=104010604010309
q->node=1040106040104
q->node=104010604010401
q->node=104010604010402
q->node=104010604010403
q->node=104010604010404
q->node=104010604010405
q->node=104010604010406
q->node=104010604010407


node view
q->node=1
q->node=103
q->node=10303
q->node=1030306
q->node=103030603
q->node=104
q->node=10401
q->node=1040105
q->node=104010507
q->node=10401050705
q->node=1040105070505
q->node=104010507050501
q->node=104010507050502
q->node=104010507050503
q->node=104010507050504
q->node=104010507050505
q->node=104010507050506
q->node=104010507050507
q->node=104010507050508
q->node=1040106
q->node=104010603
q->node=10401060308
q->node=10401060309
q->node=104010604
 

PR
【2012年04月27日05:16 】 | 未選択 | コメント(0)
コメントの投稿













前ページ | ホーム | 次ページ

忍者ブログ [PR]