[過去ログ] awkについて語るスレ $2 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
686
(3): デフォルトの名無しさん [sage] 2012/07/14(土)22:27
>>682
BEGIN{
 QMAX=3
 QTopPos=0;QTailPos=0;QNum=0;
 deQ();
 enQ("1");deQ();
 enQ("a");enQ("b");enQ("c");enQ("x");deQ();deQ();deQ();deQ();
}
function enQ(PushVal){
 if (QNum+1 > QMAX){print "おなかいっぱい"; return;}
 nextPos = (QTopPos+1) % QMAX;
 queue[QTopPos] = PushVal;
 QTopPos=nextPosQNum++;
}
function deQ(){
 if (QNum < 1){print "からっぽ"; return}
 QNum--; TailVal=queue[QTailPos]
 QTailPos = (QTailPos +1) % QMAX;
 print TailVal;
 return TailVal;
}
687: 686 [sage] 2012/07/14(土)22:54
↑の結果はこんな感じ。
>からっぽ
>1
>おなかいっぱい
>a
>b
>c
>からっぽ

>>685の書いているリングバッファ実装です。
enqueue,dequeue回数が多いならリングバッファで良いと思う。
大抵の場合はQMAXに大きな値を設定すれば事足りるハズだけど
上限が決定できない等の事情があればdelete arrayを使った単純な配列管理かな。
ただ添え字が数値上限を超えない様な工夫は必要だね。
691: 686 [sage] 2012/07/21(土)23:12 AAS
AA省
692: 686 [sage] 2012/07/21(土)23:44
691の続き
ちなみに、A[1]〜A[A[0]]をgrepして結果はA[1]〜A[?]に戻すスクリプトね。
複数件マッチする事があるので未処理行を上書きしないようにキュー使ってる。
function enQ(PushVal){
 if (QNum+1 > QMAX){print "Queue Overflow"; exit;}
 nextPos = (QTopPos+1) % QMAX;
 QBody[QTopPos]=PushVal;
 QTopPos=nextPos
 QNum++;
}
function deQ(){
 if (QNum<1){print "Illigal dequeue"; exit;}
 QNum--;
 TailVal=QBody[QTailPos];
 delete QBody[QTailPos];
 QTailPos=(QTailPos +1) % QMAX;
 return TailVal;
}
リングバッファの上限超えたら終了させてるけど>>688の実装も上限超えたらバグるし許して。
計ってないけどループがない分早い筈。コードサイズはお察し。
メモリはA[]にデータ抱えてる時点でアウトな感じだけどA[]を適宜消すようにしといた。
出力先を別にしたいならA[]にdeQ()せず別変数にすればおk。
これで良い?
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.034s