<div>아래 어떤 분이 큐 문제 올려서 그냥 만들어 보았습니다.</div> <div><br></div> <div>#include<stdio.h></div> <div>#include<stdlib.h></div> <div>#include<time.h></div> <div><br></div> <div>typedef int INT;</div> <div>typedef unsigned int UINT;</div> <div>#define FALSE 0</div> <div>#define TRUE 1</div> <div><br></div> <div><span style="font-size:9pt;line-height:1.5;">#define DATA_SIZE 36</span></div> <div>#define MAX_H 25</div> <div>#define MAX_QUE (DATA_SIZE * MAX_H)</div> <div><br></div> <div>#ifdef __cplusplus</div> <div>struct TQUEUE</div> <div>#else</div> <div>typedef struct tagQueue</div> <div>#endif</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT front;<span class="Apple-tab-span" style="white-space:pre;"> </span>// front index</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT rear;<span class="Apple-tab-span" style="white-space:pre;"> </span>// rear index</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT count;<span class="Apple-tab-span" style="white-space:pre;"> </span>// stored count</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>UINT que[DATA_SIZE * MAX_H];<span class="Apple-tab-span" style="white-space:pre;"> </span>// que buffer</div> <div><br></div> <div>#ifdef __cplusplus</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>TQUEUE();<span class="Apple-tab-span" style="white-space:pre;"> </span>// constructor</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>void Init();<span class="Apple-tab-span" style="white-space:pre;"> </span>// initialize the queue</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT PushBack(UINT* buf, INT size);<span class="Apple-tab-span" style="white-space:pre;"> </span>// return the copied size to que buffer</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT PopFront(UINT* buf, INT size, INT bREMOVE= TRUE);<span class="Apple-tab-span" style="white-space:pre;"> </span>// peek from the que buffer. return the count</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT Copy(UINT* buf, INT size);<span class="Apple-tab-span" style="white-space:pre;"> </span>// copy the que to buf. return the copied size</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT Size() { return count; }<span class="Apple-tab-span" style="white-space:pre;"> </span>// return the stored data</div> <div>#endif</div> <div><br></div> <div>#ifdef __cplusplus</div> <div>};</div> <div>#else</div> <div>} TQUEUE;</div> <div>#endif</div> <div><br></div> <div>#ifdef __cplusplus</div> <div>TQUEUE::TQUEUE()</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>front = 0;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>rear = 0;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>count = 0;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>memset(que, 0, sizeof(UINT)* MAX_QUE);</div> <div>}</div> <div>#endif</div> <div><br></div> <div>#ifdef __cplusplus</div> <div>void TQUEUE::Init()</div> <div>#else</div> <div>void Queue_Init(_this)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>TQUEUE* _this;</div> <div>#endif</div> <div>{</div> <div>#ifdef __cplusplus</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>TQUEUE* _this = this;</div> <div>#endif</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>_this->front = 0;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>_this->rear = 0;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>_this->count = 0;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>memset(_this->que, 0, sizeof(UINT)* MAX_QUE);</div> <div>}</div> <div><br></div> <div><span style="font-size:9pt;line-height:1.5;">#ifdef __cplusplus</span></div> <div>int TQUEUE::PushBack(UINT* buf, INT size)<span class="Apple-tab-span" style="white-space:pre;"> </span>// return the copied size to que buffer</div> <div>#else</div> <div>int Queue_PushBack(_this, buf, size)<span class="Apple-tab-span" style="white-space:pre;"> </span>// return the copied size to que buffer</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>TQUEUE* _this;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>UINT* buf;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT size;</div> <div>#endif</div> <div>{</div> <div>#ifdef __cplusplus</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>TQUEUE* _this = this;</div> <div>#endif</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT i=0;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for(i=0; i<size; ++i)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if(MAX_QUE == _this->count)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return i;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>*(_this->que+_this->rear) = *(buf + i);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>++_this->rear;<span class="Apple-tab-span" style="white-space:pre;"> </span>// move the _this->rear index</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>_this->rear %= MAX_QUE;<span class="Apple-tab-span" style="white-space:pre;"> </span>// reset the index</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>++_this->count;<span class="Apple-tab-span" style="white-space:pre;"> </span>// increase count</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return i;</div> <div>}</div> <div><br></div> <div>#ifdef __cplusplus</div> <div>INT TQUEUE::PopFront(UINT* buf, INT size, INT bREMOVE)</div> <div>#else</div> <div>INT Queue_PopFront(_this, buf, size, bREMOVE)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>TQUEUE* _this;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>UINT* buf;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT size;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT bREMOVE;</div> <div>#endif</div> <div>{</div> <div>#ifdef __cplusplus</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>TQUEUE* _this = this;</div> <div>#endif</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT i=0;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT t_front = 0;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT t_count = 0;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if(0 == _this->count)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return 0;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if(bREMOVE)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for(i=0; i<size; ++i)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if(0 == _this->count)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return i;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>*(buf + i) = *(_this->que + _this->front);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>++_this->front;<span class="Apple-tab-span" style="white-space:pre;"> </span>// move the rear index</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>_this->front %= MAX_QUE;<span class="Apple-tab-span" style="white-space:pre;"> </span>// reset the index</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>--_this->count;<span class="Apple-tab-span" style="white-space:pre;"> </span>// increase count</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return i;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><br></div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>t_front = _this->front;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>t_count = _this->count;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for(i=0; i<size; ++i)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if(0 == t_count)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return i;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>*(buf + i) = *(_this->que + t_front);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>++t_front;<span class="Apple-tab-span" style="white-space:pre;"> </span>// move the rear index</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>t_front %= MAX_QUE;<span class="Apple-tab-span" style="white-space:pre;"> </span>// reset the index</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>--t_count;<span class="Apple-tab-span" style="white-space:pre;"> </span>// increase count</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return i;</div> <div>}</div> <div><br></div> <div>#ifdef __cplusplus</div> <div>INT TQUEUE::Copy(UINT* buf, INT size)</div> <div>#else</div> <div>INT Queue_Copy(_this, buf, size)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>TQUEUE* _this;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>UINT* buf;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT size;</div> <div>#endif</div> <div>{</div> <div>#ifdef __cplusplus</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>TQUEUE* _this = this;</div> <div>#endif</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT i=0;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT t_front = _this->front;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT t_count = _this->count;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for(i=0; i<size; ++i)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if(0 == t_count)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return i;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>*(buf + i) = *(_this->que + t_front);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>++t_front;<span class="Apple-tab-span" style="white-space:pre;"> </span>// move the rear index</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>t_front %= MAX_QUE;<span class="Apple-tab-span" style="white-space:pre;"> </span>// reset the index</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>--t_count;<span class="Apple-tab-span" style="white-space:pre;"> </span>// increase count</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return i;</div> <div>}</div> <div><br></div> <div><span style="font-size:9pt;line-height:1.5;">int main(int argc, char** argv)</span></div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT number;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT outnum;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT random;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>UINT arr_i[DATA_SIZE+4] ={0};</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>UINT arr_o[DATA_SIZE+4] ={0};</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT rcv =0;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT i =0;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>INT size = 0;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>TQUEUE qh;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>srand((unsigned)time(NULL));</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>#ifdef __cplusplus</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>qh.Init();</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>#else</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>Queue_Init(&qh);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>#endif</div> <div><br></div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for(outnum=0;outnum<10000;outnum++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>size = 4 + rand()% DATA_SIZE;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for(number=0;number<size;number++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>random = rand();<span class="Apple-tab-span" style="white-space:pre;"> </span>// 난수생성</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>arr_i[number]=random%100;<span class="Apple-tab-span" style="white-space:pre;"> </span>// 임시배열에 난수 넣기</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("add : %2d :: ", size);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for(i=0; i<size; ++i)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%2d ", arr_i[i]);</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("\n");</div> <div><br></div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>// test ...</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>#ifdef __cplusplus</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>qh.PushBack(arr_i, size);<span class="Apple-tab-span" style="white-space:pre;"> </span>// temp를 큐에 넣기</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>rcv = qh.PopFront(arr_o, size, TRUE);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>#else</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>Queue_PushBack(&qh, arr_i, size);<span class="Apple-tab-span" style="white-space:pre;"> </span>// temp를 큐에 넣기</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>rcv = Queue_PopFront(&qh, arr_o, size, TRUE);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>#endif</div> <div><br></div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("peek: %2d :: ", size);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for(i=0; i<rcv; ++i)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%2d ", arr_o[i]);</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("\n");</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="font-size:9pt;line-height:1.5;white-space:pre;"> </span><span style="font-size:9pt;line-height:1.5;">return 0;</span></div> <div>}</div> <div><br></div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.