<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.5">Jekyll</generator><link href="https://kieranoh.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://kieranoh.github.io/" rel="alternate" type="text/html" /><updated>2024-07-19T12:38:39+00:00</updated><id>https://kieranoh.github.io/feed.xml</id><title type="html">Kieran’s blog</title><subtitle>Kieran's study blog</subtitle><author><name>Kieran oh</name></author><entry><title type="html">Bubble Sort</title><link href="https://kieranoh.github.io/datastructure/bubble-sort/" rel="alternate" type="text/html" title="Bubble Sort" /><published>2024-07-19T00:00:00+00:00</published><updated>2024-07-19T00:00:00+00:00</updated><id>https://kieranoh.github.io/datastructure/bubble-sort</id><content type="html" xml:base="https://kieranoh.github.io/datastructure/bubble-sort/"><![CDATA[<h1 id="bubble-sort">Bubble Sort</h1>

<p>이번 목표는 Sorting 기법중 하나인 Bubble Sort를 C언어로 구현하는것이다.</p>

<p>Bubble Sort (버블 정렬)은 인접한 두 원소를 검사하여 정렬하는 알고리즘이다</p>

<p>시간 복잡도 O(n^2)</p>

<p>공간복잡도 O(n)</p>

<h2 id="설명">설명</h2>

<p>버블 정렬은 첫번째 자료와 두번째 자료를 비교, 두번째 자료와 세번째 자료 비교,… 마지막-1 자료와 마지막 자료를 비교하여정렬한다.</p>

<p>이를 한번 마지막까지 실행하면 가장 큰 자료가 맨 뒤로 이동한다. 두번째 실행에서는 마지막을 제외하고 실행하면 정렬되는 데이터가 하나는 증가한다.</p>

<h2 id="구현">구현</h2>

<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include</span> <span class="cpf">&lt;stdio.h&gt;</span><span class="cp">
</span>
<span class="kt">void</span> <span class="nf">bubbleSort</span><span class="p">(</span><span class="kt">int</span> <span class="n">arr</span><span class="p">[],</span><span class="kt">int</span> <span class="n">size</span><span class="p">)</span>
<span class="p">{</span>
	<span class="kt">int</span> <span class="n">temp</span><span class="p">;</span>
	<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="n">i</span><span class="o">&lt;</span><span class="n">size</span><span class="p">;</span><span class="n">i</span><span class="o">++</span><span class="p">)</span>
	    <span class="p">{</span>
	        <span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">j</span><span class="o">=</span><span class="mi">1</span><span class="p">;</span><span class="n">j</span><span class="o">&lt;</span><span class="n">size</span><span class="o">-</span><span class="n">i</span><span class="p">;</span><span class="n">j</span><span class="o">++</span><span class="p">)</span>
	        <span class="p">{</span>
	            <span class="k">if</span><span class="p">(</span><span class="n">arr</span><span class="p">[</span><span class="n">j</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">&gt;</span> <span class="n">arr</span><span class="p">[</span><span class="n">j</span><span class="p">])</span>
	            <span class="p">{</span>
	                <span class="n">temp</span> <span class="o">=</span> <span class="n">arr</span><span class="p">[</span><span class="n">j</span><span class="o">-</span><span class="mi">1</span><span class="p">];</span>
	                <span class="n">arr</span><span class="p">[</span><span class="n">j</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">arr</span><span class="p">[</span><span class="n">j</span><span class="p">];</span>
	                <span class="n">arr</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">temp</span><span class="p">;</span>
	            <span class="p">}</span>
	        <span class="p">}</span>
	    <span class="p">}</span>
<span class="p">}</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
<span class="p">{</span>
	<span class="kt">int</span> <span class="n">arr</span><span class="p">[</span><span class="mi">100</span><span class="p">];</span>
	<span class="kt">int</span> <span class="n">i</span><span class="p">,</span> <span class="n">cnt</span><span class="p">;</span>        
	
	<span class="n">scanf</span><span class="p">(</span><span class="s">"%d"</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">cnt</span><span class="p">);</span>
	
	<span class="k">for</span><span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> <span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">cnt</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="n">scanf</span><span class="p">(</span><span class="s">"%d"</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span>
	<span class="p">}</span>

	<span class="n">printf</span><span class="p">(</span><span class="s">"before bubble sort</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>

	<span class="k">for</span><span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> <span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">cnt</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="n">printf</span><span class="p">(</span><span class="s">"%d "</span><span class="p">,</span><span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span>
	<span class="p">}</span>
	<span class="n">printf</span><span class="p">(</span><span class="s">"</span><span class="se">\n</span><span class="s">after bubble sort</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
    
	<span class="n">bubbleSort</span><span class="p">(</span><span class="n">arr</span><span class="p">,</span><span class="n">cnt</span> <span class="o">-</span> <span class="mi">1</span><span class="p">);</span>    
	
    <span class="k">for</span><span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">cnt</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="n">printf</span><span class="p">(</span><span class="s">"%d "</span><span class="p">,</span> <span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span>
	<span class="p">}</span>
<span class="p">}</span>

</code></pre></div></div>

<p>결과</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>before bubble sort
5  7  6  8  9  1  3  2  4  10
after bubble sort
1  2  3  4  5  6  7  8  9  10
</code></pre></div></div>]]></content><author><name>Kieran oh</name></author><category term="DataStructure" /><category term="DataStructure" /><category term="Sorting" /><category term="Bubble-Sort" /><summary type="html"><![CDATA[Bubble Sort]]></summary></entry><entry><title type="html">Merge Sort</title><link href="https://kieranoh.github.io/datastructure/merge-sort/" rel="alternate" type="text/html" title="Merge Sort" /><published>2024-07-19T00:00:00+00:00</published><updated>2024-07-19T00:00:00+00:00</updated><id>https://kieranoh.github.io/datastructure/merge-sort</id><content type="html" xml:base="https://kieranoh.github.io/datastructure/merge-sort/"><![CDATA[<h1 id="merge-sort">Merge Sort</h1>

<p>이번 목표는 Sorting 기법중 하나인 Merge Sort를 C언어로 구현하는것이다.</p>

<p>Merge Sort(병합 정렬)은 하나의 리스트를 균등한 크기로 분할하고 분할한 리스트를 정렬한 다음 두개의 리스트를 다시 합하여 전체가 정렬되게 하는 것이다.</p>

<p>시간 복잡도 O(nlongn)</p>

<p>공간복잡도 O(n)</p>

<h2 id="설명">설명</h2>

<p>Merge Sort는 총 3단계로 구성되어있다.</p>

<ul>
  <li>
    <p>분할(Divide): 입력 배열을 같은 크기의 2개의 배열로 분할한다.</p>
  </li>
  <li>
    <p>정복(Conquer): 각각 배열을 정렬한다.</p>
  </li>
  <li>
    <p>결합(Combine): 정렬된 배열을 하나의 배열에 결합한다.</p>
  </li>
</ul>

<p>위 3단계를 수행하기 위해서 추가적인 리스트가 필요하다.</p>

<h2 id="구현">구현</h2>

<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include</span> <span class="cpf">&lt;stdio.h&gt;</span><span class="cp">
</span>
<span class="kt">void</span> <span class="nf">merge</span><span class="p">(</span><span class="kt">int</span> <span class="n">a</span><span class="p">[],</span> <span class="kt">int</span> <span class="n">low</span><span class="p">,</span> <span class="kt">int</span> <span class="n">mid</span><span class="p">,</span> <span class="kt">int</span> <span class="n">hight</span><span class="p">)</span>   
<span class="p">{</span>
	<span class="kt">int</span> <span class="n">b</span><span class="p">[</span><span class="mi">100</span><span class="p">];</span>
	<span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="n">low</span><span class="p">;</span>        
	<span class="kt">int</span> <span class="n">j</span> <span class="o">=</span> <span class="n">mid</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>    
	<span class="kt">int</span> <span class="n">k</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>          
	
	<span class="k">while</span><span class="p">(</span><span class="n">i</span> <span class="o">&lt;=</span> <span class="n">mid</span> <span class="o">&amp;&amp;</span> <span class="n">j</span> <span class="o">&lt;=</span> <span class="n">hight</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="k">if</span><span class="p">(</span><span class="n">a</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">&lt;=</span> <span class="n">a</span><span class="p">[</span><span class="n">j</span><span class="p">])</span>        
			<span class="n">b</span><span class="p">[</span><span class="n">k</span><span class="o">++</span><span class="p">]</span> <span class="o">=</span> <span class="n">a</span><span class="p">[</span><span class="n">i</span><span class="o">++</span><span class="p">];</span>
		<span class="k">else</span>
			<span class="n">b</span><span class="p">[</span><span class="n">k</span><span class="o">++</span><span class="p">]</span> <span class="o">=</span> <span class="n">a</span><span class="p">[</span><span class="n">j</span><span class="o">++</span><span class="p">];</span>
	<span class="p">}</span>
	<span class="k">while</span><span class="p">(</span><span class="n">i</span> <span class="o">&lt;=</span> <span class="n">mid</span><span class="p">)</span>            
		<span class="n">b</span><span class="p">[</span><span class="n">k</span><span class="o">++</span><span class="p">]</span> <span class="o">=</span> <span class="n">a</span><span class="p">[</span><span class="n">i</span><span class="o">++</span><span class="p">];</span>
	<span class="k">while</span><span class="p">(</span><span class="n">j</span> <span class="o">&lt;=</span> <span class="n">hight</span><span class="p">)</span>           
		<span class="n">b</span><span class="p">[</span><span class="n">k</span><span class="o">++</span><span class="p">]</span> <span class="o">=</span> <span class="n">a</span><span class="p">[</span><span class="n">j</span><span class="o">++</span><span class="p">];</span>
	<span class="n">k</span><span class="o">--</span><span class="p">;</span>
    
	<span class="k">while</span><span class="p">(</span><span class="n">k</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">)</span>               
	<span class="p">{</span>
		<span class="n">a</span><span class="p">[</span><span class="n">low</span> <span class="o">+</span> <span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">b</span><span class="p">[</span><span class="n">k</span><span class="p">];</span>
		<span class="n">k</span><span class="o">--</span><span class="p">;</span>
	<span class="p">}</span>
<span class="p">}</span>
<span class="kt">void</span> <span class="nf">mergeSort</span><span class="p">(</span><span class="kt">int</span> <span class="n">a</span><span class="p">[],</span> <span class="kt">int</span> <span class="n">low</span><span class="p">,</span> <span class="kt">int</span> <span class="n">hight</span><span class="p">)</span>    
<span class="p">{</span>
	
	<span class="kt">int</span> <span class="n">mid</span><span class="p">;</span>
	<span class="k">if</span><span class="p">(</span><span class="n">low</span> <span class="o">&lt;</span> <span class="n">hight</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="n">mid</span> <span class="o">=</span> <span class="p">(</span><span class="n">low</span> <span class="o">+</span> <span class="n">hight</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">;</span>
		<span class="n">mergeSort</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">low</span><span class="p">,</span> <span class="n">mid</span><span class="p">);</span>            
		<span class="n">mergeSort</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">mid</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">hight</span><span class="p">);</span>      
		<span class="n">merge</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">low</span><span class="p">,</span> <span class="n">mid</span><span class="p">,</span> <span class="n">hight</span><span class="p">);</span>          
	<span class="p">}</span>
<span class="p">}</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
<span class="p">{</span>
	<span class="kt">int</span> <span class="n">arr</span><span class="p">[</span><span class="mi">100</span><span class="p">];</span>
	<span class="kt">int</span> <span class="n">i</span><span class="p">,</span> <span class="n">cnt</span><span class="p">;</span>        
	
	<span class="n">scanf</span><span class="p">(</span><span class="s">"%d"</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">cnt</span><span class="p">);</span>
	
	<span class="k">for</span><span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> <span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">cnt</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="n">scanf</span><span class="p">(</span><span class="s">"%d"</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span>
	<span class="p">}</span>

	<span class="n">printf</span><span class="p">(</span><span class="s">"before merge sort</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>

	<span class="k">for</span><span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> <span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">cnt</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="n">printf</span><span class="p">(</span><span class="s">"%d "</span><span class="p">,</span><span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span>
	<span class="p">}</span>
	<span class="n">printf</span><span class="p">(</span><span class="s">"</span><span class="se">\n</span><span class="s">after merge sort</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
    
	<span class="n">mergeSort</span><span class="p">(</span><span class="n">arr</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">cnt</span> <span class="o">-</span> <span class="mi">1</span><span class="p">);</span>    
	
    <span class="k">for</span><span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">cnt</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="n">printf</span><span class="p">(</span><span class="s">"%d "</span><span class="p">,</span> <span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span>
	<span class="p">}</span>
<span class="p">}</span>

</code></pre></div></div>

<p>결과</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>before merge sort
5  7  6  8  9  1  3  2  4  10
after merge sort
1  2  3  4  5  6  7  8  9  10
</code></pre></div></div>]]></content><author><name>Kieran oh</name></author><category term="DataStructure" /><category term="DataStructure" /><category term="Sorting" /><category term="Merge-Sort" /><summary type="html"><![CDATA[Merge Sort]]></summary></entry><entry><title type="html">qsort</title><link href="https://kieranoh.github.io/function/qsort/" rel="alternate" type="text/html" title="qsort" /><published>2024-07-19T00:00:00+00:00</published><updated>2024-07-19T00:00:00+00:00</updated><id>https://kieranoh.github.io/function/qsort</id><content type="html" xml:base="https://kieranoh.github.io/function/qsort/"><![CDATA[<h1 id="qsort">qsort</h1>

<p>이번 목표는 qsort 함수 사용법을 공부하는 것이다. qsort는 C언어에서 제공하는 정렬 라이브러리 함수이고 quick sort를 이용한다</p>

<h2 id="기본-구조">기본 구조</h2>

<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kt">void</span> <span class="nf">qsort</span><span class="p">(</span><span class="kt">void</span> <span class="o">*</span><span class="n">base</span><span class="p">,</span> <span class="kt">size_t</span> <span class="n">nel</span><span class="p">,</span> <span class="kt">size_t</span> <span class="n">width</span><span class="p">,</span> <span class="kt">int</span><span class="p">(</span><span class="o">*</span><span class="n">compare</span><span class="p">)(</span><span class="k">const</span> <span class="kt">void</span><span class="o">*</span><span class="p">,</span> <span class="k">const</span> <span class="kt">void</span><span class="o">*</span><span class="p">));</span>
</code></pre></div></div>

<ul>
  <li>
    <p>base : 정렬할 배열의 포인터</p>
  </li>
  <li>
    <p>nel : 배열의 각 원소들의 총 수</p>
  </li>
  <li>
    <p>width : 배열에서 원소하나의 크기</p>
  </li>
  <li>
    <p>(*compare) : 비교를 수행할 함수 포인터</p>
  </li>
</ul>

<h3 id="compare-함수">compare 함수</h3>

<p>비교함수 내부에는 1,0,-1 중 하나를 반환해야한다. 만약 <u>오름차순</u>으로 정렬하고 싶으면 비교함수 내부에서 첫번째가 두번째보다 클 때 1을, 작을 때 -1, 같을 때 0을 반환하면 된다.</p>

<h2 id="구현">구현</h2>

<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include</span> <span class="cpf">&lt;stdio.h&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;stdlib.h&gt;</span><span class="cp">
</span>

<span class="kt">int</span> <span class="nf">compare</span> <span class="p">(</span><span class="k">const</span> <span class="kt">void</span><span class="o">*</span> <span class="n">first</span><span class="p">,</span> <span class="k">const</span> <span class="kt">void</span><span class="o">*</span> <span class="n">second</span><span class="p">)</span>
<span class="p">{</span>
	<span class="kt">int</span> <span class="n">a</span> <span class="o">=</span> <span class="o">*</span><span class="p">(</span><span class="kt">int</span><span class="o">*</span><span class="p">)</span> <span class="n">first</span><span class="p">;</span> <span class="c1">//포인터를 int형으로 변환</span>
	<span class="kt">int</span> <span class="n">b</span> <span class="o">=</span> <span class="o">*</span><span class="p">(</span><span class="kt">int</span><span class="o">*</span><span class="p">)</span> <span class="n">second</span><span class="p">;</span>
    <span class="k">if</span> <span class="p">(</span><span class="n">a</span> <span class="o">&gt;</span> <span class="n">b</span><span class="p">)</span>
        <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
    <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">a</span> <span class="o">&lt;</span> <span class="n">b</span><span class="p">)</span>
        <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
    <span class="k">else</span>
        <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>

<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
    <span class="kt">int</span> <span class="n">arr</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span><span class="mi">5</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">10</span><span class="p">};</span>
    <span class="kt">int</span> <span class="n">array_size</span> <span class="o">=</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">arr</span><span class="p">)</span> <span class="o">/</span> <span class="k">sizeof</span><span class="p">(</span><span class="kt">int</span><span class="p">);</span>
    <span class="kt">int</span> <span class="n">i</span><span class="p">;</span>

    <span class="n">printf</span><span class="p">(</span><span class="s">"before qsort </span><span class="se">\n</span><span class="s">"</span><span class="p">)</span>
    <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">array_size</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> 
	<span class="p">{</span>
		<span class="n">printf</span><span class="p">(</span><span class="s">"%d "</span><span class="p">,</span> <span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span>
	<span class="p">}</span>
    <span class="n">printf</span><span class="p">(</span><span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>

    <span class="n">qsort</span><span class="p">(</span><span class="n">arr</span><span class="p">,</span> <span class="n">array_size</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="kt">int</span><span class="p">),</span> <span class="n">compare</span><span class="p">);</span>

	<span class="n">printf</span><span class="p">(</span><span class="s">"after qsort </span><span class="se">\n</span><span class="s">"</span><span class="p">)</span>
    <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">array_size</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> 
	<span class="p">{</span>
		<span class="n">printf</span><span class="p">(</span><span class="s">"%d "</span><span class="p">,</span> <span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span>
	<span class="p">}</span>


    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>


</code></pre></div></div>

<p>결과</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>before qsort 
5  7  6  8  9  1  3  2  4  10
after qsort
1  2  3  4  5  6  7  8  9  10
</code></pre></div></div>]]></content><author><name>Kieran oh</name></author><category term="function" /><category term="DataStructure" /><category term="Sorting" /><category term="qsort" /><category term="Quick-Sort" /><category term="function" /><summary type="html"><![CDATA[qsort]]></summary></entry><entry><title type="html">1.2 Protocol Layering</title><link href="https://kieranoh.github.io/computer_network/Protocal-Layering/" rel="alternate" type="text/html" title="1.2 Protocol Layering" /><published>2024-03-21T00:00:00+00:00</published><updated>2024-03-21T00:00:00+00:00</updated><id>https://kieranoh.github.io/computer_network/Protocal-Layering</id><content type="html" xml:base="https://kieranoh.github.io/computer_network/Protocal-Layering/"><![CDATA[<h1 id="protocol">Protocol</h1>
<p>Protocol - defines the rule both the sender and receiver.</p>

<p>데이터 통신을 원활하게 하기 위한 통신 규약.</p>

<p>There are 5 layers in TCP/IP protocol</p>

<h2 id="protocol-layering">Protocol Layering</h2>

<ol>
  <li>
    <p>Application Layer (Layer 5)</p>

    <ul>
      <li>
        <p>To communicate, a process send a requst to the other process and receives a response</p>
      </li>
      <li>
        <p>Process-toProcess communication is the duty of the Application Layer</p>
      </li>
    </ul>
  </li>
  <li>
    <p>Transport Layer (Layer 4)</p>

    <ul>
      <li>
        <p>giving servies to the application layer</p>
      </li>
      <li>
        <p>get a message from an application program and deliver it to the corresponding application</p>
      </li>
    </ul>
  </li>
  <li>
    <p>Network Layer (Layer 3)</p>

    <ul>
      <li>
        <p>responsible for creating a connection between the source computer and destination computer</p>
      </li>
      <li>
        <p>the communication at the network layer is host-to-host</p>
      </li>
    </ul>
  </li>
  <li>
    <p>Data-link Layer (Layer 2)</p>

    <ul>
      <li>routers are responsible for chossing the best link</li>
    </ul>
  </li>
  <li>
    <p>Physical Later (Layer 1)</p>

    <ul>
      <li>carrying indiciduals bits in a frame across the link</li>
    </ul>
  </li>
</ol>

<table>
  <thead>
    <tr>
      <th>Layer</th>
      <th>name</th>
      <th>설명</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Layer 5</td>
      <td>Application</td>
      <td>서비스 제공<br />HTTP,FTP,SMTP,DNS등 프로토콜 동작<br />데이터 형식, 암호화 압축등 정의</td>
    </tr>
    <tr>
      <td>Layer 4</td>
      <td>Transport</td>
      <td>End-toEnd 데이터 전송 관리<br />TCP와 UDP 프로토콜이 대표적 <br /> TCP 연결 지행적, 신뢰성 데이터 전송, <br />UDP는 비연결 지향적, 신뢰성은 낮지만 속도 중시</td>
    </tr>
    <tr>
      <td>Layer 3</td>
      <td>Network</td>
      <td>패킬을 목적지로 전달<br />IP 프로토콜이 이 계층에서 동작<br />라우우팅 패킷 분할/재조립 기능 수행</td>
    </tr>
    <tr>
      <td>Layer 2</td>
      <td>Data link</td>
      <td>물리적 네트워크의 접근을 제공<br />물리주소(MAC) 사용</td>
    </tr>
    <tr>
      <td>Layer 1</td>
      <td>Physical</td>
      <td>물리 매채를 비트스트림 전송<br />전기 신호, 광신호 등의 구체적인 전송방식 정의</td>
    </tr>
  </tbody>
</table>

<p>*End to End - 제3자가 엔드포인트 간에 전송된 데이터에 액세스하지 못하도록 차단하는 보안 통신 프로세스</p>

<p>*Packet - 정보를 보낼 때 특정 형태를 맞추어 보낸다는 것</p>

<p>상위 계층으로 갈수록 추상화 수준이 높아진다</p>

<p>각 계층은 하위 계층에 의존</p>

<p>데이터 전송은 Application Layer(가장 상위 계층)에서 시작된다.</p>

<p>Layer 5에서 생성된 데이터는 아래 계층으로 내려가며 해당 프로토콜에 따라 캡슐화(encapsulation)된다.</p>

<h2 id="communication">Communication</h2>

<p><img src="/images/communication_from_a_to_b.jpg" alt="Communication_from_A_to_B" /></p>

<p>The source host (Source A) need to create a messafe in the application layer and sent it down the layers.</p>

<p>Router is onvolved only three layer (is used only for routing)</p>

<p>-&gt; Physical, Data link, Network</p>

<p>Switch is involved only two layer</p>

<p>-&gt;Physical, Data link</p>

<p>*Top three layer is the network, two lower layer is the link.</p>

<p>One of the most important concepts in protocol layering in the Internet is encapsulation/decapsulation.</p>

<ul>
  <li>Encapsulation at the Source Host</li>
  <li>Decapsulation and Encapsulation at Router</li>
  <li>Decapsulation at the Destination Host</li>
</ul>

<h2 id="adressing-in-the-tcpip-protocol">Adressing in the TCP/IP protocol</h2>

<p><img src="/images/protocol.jpg" alt="protocol" /></p>

<p>This is the table for the packet names and addresses for each layer.</p>

<p>Difference between Frame and Datagram</p>

<p>Frame</p>

<ul>
  <li>Data-linke에서 사용되는 단위</li>
  <li>물리주소를 헤더에 포함</li>
  <li>신뢰성을 위해 오류 검출 및 수정기능 제공</li>
</ul>

<p>Datagram</p>

<ul>
  <li>Internet layer에서 사용되는 단위</li>
  <li>소스와 목적지의 논리주소 (IP 주소) 를 헤더에 포함</li>
  <li>신뢰성 보장이 약함</li>
</ul>

<h2 id="multiplexing-and-demutiplexing">Multiplexing and Demutiplexing</h2>

<p><img src="/images/multiplexing.jpg" alt="multiplexing" /></p>

<p>Multiplexing : A protocol at a layer can encapsulate a paket from several next-higher layer protocol</p>

<p>Demultiplexing : decapsulating and delivera packe to several next-higher layer.</p>

<p>위 표는 TCP/IP 프로토콜 스탹의 구조를 보여준다.</p>

<p>최상위 계층은 애플리케이션 계층으로, FTP(파일 전송 프로토콜), HTTP(웹 프로토콜), DNS(도메인 이름 시스템), SNMP(네트워크 관리 프로토콜)이 있다.</p>

<p>전송계층에는 TCP(Transmission Control Protocol) 와 UDP (User Data Protocol)이 있다.</p>]]></content><author><name>Kieran oh</name></author><category term="Computer_Network" /><category term="Protocol_Layering" /><category term="TCP/IP" /><summary type="html"><![CDATA[Protocol Protocol - defines the rule both the sender and receiver.]]></summary></entry><entry><title type="html">1.1 Overview of the Internet</title><link href="https://kieranoh.github.io/computer_network/Overview-of-Internet/" rel="alternate" type="text/html" title="1.1 Overview of the Internet" /><published>2024-03-20T00:00:00+00:00</published><updated>2024-03-20T00:00:00+00:00</updated><id>https://kieranoh.github.io/computer_network/Overview-of-Internet</id><content type="html" xml:base="https://kieranoh.github.io/computer_network/Overview-of-Internet/"><![CDATA[<h1 id="lan--wan">LAN &amp; WAN</h1>

<p>LAN( local area network ) 은 근거리 통신망으로 제한된 지역 내에서 컴퓨터, 프린터, 스토리지 등 장치들을 연결하는 네트워크이다.</p>

<p>WAN( Wide area network ) 은 광대한 지역을 연결하는 원거리 통신망으로 도시, 지역, 국가 간 거리를 포관하는 넓은 영역들을 연결한다.</p>

<p>difference between LAN &amp; WAN</p>

<table>
  <thead>
    <tr>
      <th>LAN</th>
      <th>WAN</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Limited in size<br />interconnect host<br />privately</td>
      <td>widw sapn<br />connect switch, router, mordem</td>
    </tr>
  </tbody>
</table>

<p>*modem - 정보 전달을 위해 신호를 변조하고 송신하고, 수신측에서 원래 신호로 복구하기 위한 보조장치이다. (디지털 신호 (01001) -&gt; 아날로그 신호(진동))</p>

<h2 id="wan">WAN</h2>
<p>WAN의 두가지 대표적인 예시에는 Point-to-point WANs, Switched WANs가 있다.</p>

<h3 id="point-to-point-wan">Point-to-point WAN</h3>

<p><img src="/images/point-to-point_wan.png" alt="point-to-point" /></p>

<ul>
  <li>connet two communicating device (cable or air)</li>
</ul>

<h3 id="switched-wan">Switched WAN</h3>

<p><img src="/images/switched-wan.png" alt="switched-wan" /></p>

<ul>
  <li>conneted by switch</li>
</ul>

<h2 id="데이터-전송방식">데이터 전송방식</h2>

<p>데이터 전송 방식에는 Circuit Switch(CSNs)와 Packet Switch(PSNs)가 있다</p>

<table>
  <thead>
    <tr>
      <th>Circuit Switch</th>
      <th>Packet Switch</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>전용 통신획선을 전송 기간동안 독점적으로 사용</td>
      <td>네트워크 자원을 동적으로 공유</td>
    </tr>
    <tr>
      <td>전공 대역폭이 데이터 양과 상관없이 고정</td>
      <td>패킷 단위로 데이터 전송</td>
    </tr>
    <tr>
      <td>전화 네트워크 등에서 사용</td>
      <td>패킷은 동일한 물리 회선을 공유하며 서로다른 경로를 거칠 수 있다</td>
    </tr>
  </tbody>
</table>

<p>*Packet - 정보를 보낼때 특정형태를 맞추어 보내는것</p>

<p><img src="/images/CircuitSwitched.jpg" alt="Circuit-Switch" /></p>

<p><img src="/images/PacketSwitched.jpg" alt="Packet Switch" /></p>

<h2 id="difference-between-internet--internet">Difference between internet &amp; Internet</h2>

<p>internet - is two or more network that can communicate each other</p>

<p>Internet - composed of thousand of interconnected network</p>]]></content><author><name>Kieran oh</name></author><category term="Computer_Network" /><category term="Computer_Network" /><category term="WAN" /><category term="LAN" /><summary type="html"><![CDATA[LAN &amp; WAN]]></summary></entry><entry><title type="html">Circular Linked List</title><link href="https://kieranoh.github.io/datastructure/circular-linked-list/" rel="alternate" type="text/html" title="Circular Linked List" /><published>2023-10-15T00:00:00+00:00</published><updated>2023-10-15T00:00:00+00:00</updated><id>https://kieranoh.github.io/datastructure/circular-linked-list</id><content type="html" xml:base="https://kieranoh.github.io/datastructure/circular-linked-list/"><![CDATA[<h1 id="circular-linked-list">Circular Linked List</h1>

<p>이번 목표는 자료구조중 하나인 Circular Loinked List, 원형 연결 리스트를 c 언어로 구현하는것 이다. 원형 연결 리스트는 노드를 이용해서 리스트를 만드는 것이다</p>

<h2 id="구조">구조</h2>

<p>Node -&gt;Node *next, int data</p>

<p>List -&gt;Node *head(시작),Node *tail(마지막),Node *cur(현재),Node *before(현재 -1)</p>

<p>brfore를 사용하는 이유는 remove를 하기위해 사용된다.</p>

<p>remove 함수는 li-&gt;before-&gt;next 주소를(리스트의 현재 위치 -1 의 next 주소) li-&gt;cur-&gt; next 주소로 (리스트 현재 위치의 다음주소) 바꾸어 주고, li-&gt;cur를 (리스트의 현재 위치) li-&gt;before로 (리스트의 현재 위치 -1) 바꾸어준후 free를 통해 제거해준다.</p>

<h2 id="구현">구현</h2>

<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include</span> <span class="cpf">&lt;stdio.h&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;stdlib.h&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;string.h&gt;</span><span class="cp">
</span>
<span class="k">typedef</span> <span class="k">struct</span> <span class="n">Node</span><span class="p">{</span>
	<span class="k">struct</span> <span class="n">Node</span> <span class="o">*</span><span class="n">next</span><span class="p">;</span>
	<span class="kt">int</span> <span class="n">data</span><span class="p">;</span>
<span class="p">}</span><span class="n">Node</span><span class="p">;</span>

<span class="k">typedef</span> <span class="k">struct</span> <span class="n">List</span><span class="p">{</span>
	<span class="n">Node</span> <span class="o">*</span><span class="n">head</span><span class="p">;</span>
	<span class="n">Node</span> <span class="o">*</span><span class="n">tail</span><span class="p">;</span>
	<span class="n">Node</span> <span class="o">*</span><span class="n">cur</span><span class="p">;</span>
	<span class="n">Node</span> <span class="o">*</span><span class="n">brefore</span><span class="p">;</span>
<span class="p">}</span><span class="n">List</span><span class="p">;</span>

<span class="kt">void</span> <span class="nf">init</span><span class="p">(</span><span class="n">List</span> <span class="o">*</span><span class="n">li</span><span class="p">)</span>
<span class="p">{</span>
	<span class="n">li</span><span class="o">-&gt;</span><span class="n">head</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
	<span class="n">li</span><span class="o">-&gt;</span><span class="n">tail</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
	<span class="n">li</span><span class="o">-&gt;</span><span class="n">cur</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
	<span class="n">li</span><span class="o">-&gt;</span><span class="n">brefore</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
	
<span class="p">}</span>

<span class="kt">void</span> <span class="nf">Insert_node</span><span class="p">(</span><span class="n">List</span> <span class="o">*</span><span class="n">li</span><span class="p">,</span> <span class="kt">int</span> <span class="n">num</span><span class="p">)</span>
<span class="p">{</span>
	<span class="n">Node</span> <span class="o">*</span><span class="n">temp</span> <span class="o">=</span> <span class="p">(</span><span class="n">Node</span><span class="o">*</span><span class="p">)</span><span class="n">malloc</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">Node</span><span class="p">));</span>
	<span class="n">temp</span><span class="o">-&gt;</span><span class="n">data</span> <span class="o">=</span> <span class="n">num</span><span class="p">;</span>
	
	<span class="k">if</span><span class="p">(</span><span class="n">li</span><span class="o">-&gt;</span><span class="n">head</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="n">li</span><span class="o">-&gt;</span><span class="n">head</span> <span class="o">=</span> <span class="n">temp</span><span class="p">;</span>
		<span class="n">li</span><span class="o">-&gt;</span><span class="n">tail</span> <span class="o">=</span> <span class="n">temp</span><span class="p">;</span>
		<span class="n">temp</span><span class="o">-&gt;</span><span class="n">next</span> <span class="o">=</span> <span class="n">temp</span><span class="p">;</span>
	<span class="p">}</span>
	<span class="k">else</span>
	<span class="p">{</span>
		<span class="n">temp</span><span class="o">-&gt;</span><span class="n">next</span> <span class="o">=</span> <span class="n">li</span><span class="o">-&gt;</span><span class="n">tail</span><span class="o">-&gt;</span><span class="n">next</span><span class="p">;</span>
		<span class="n">li</span><span class="o">-&gt;</span><span class="n">tail</span><span class="o">-&gt;</span><span class="n">next</span> <span class="o">=</span> <span class="n">temp</span><span class="p">;</span>
		<span class="n">li</span><span class="o">-&gt;</span><span class="n">tail</span> <span class="o">=</span> <span class="n">temp</span><span class="p">;</span>	
	<span class="p">}</span>
<span class="p">}</span>

<span class="kt">void</span> <span class="nf">Cur_init</span><span class="p">(</span><span class="n">List</span> <span class="o">*</span><span class="n">li</span><span class="p">)</span>
<span class="p">{</span>
	<span class="n">li</span><span class="o">-&gt;</span><span class="n">cur</span> <span class="o">=</span> <span class="n">li</span><span class="o">-&gt;</span><span class="n">tail</span><span class="p">;</span>
	<span class="n">li</span><span class="o">-&gt;</span><span class="n">brefore</span> <span class="o">=</span> <span class="n">li</span><span class="o">-&gt;</span><span class="n">tail</span><span class="p">;</span>
<span class="p">}</span>

<span class="kt">void</span> <span class="nf">Remove_node</span><span class="p">(</span><span class="n">List</span> <span class="o">*</span><span class="n">li</span><span class="p">)</span>
<span class="p">{</span>
	<span class="n">Node</span> <span class="o">*</span><span class="n">temp</span> <span class="o">=</span> <span class="n">li</span><span class="o">-&gt;</span><span class="n">cur</span><span class="p">;</span>
	<span class="k">if</span><span class="p">(</span><span class="n">temp</span> <span class="o">==</span> <span class="n">li</span><span class="o">-&gt;</span><span class="n">tail</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="k">if</span><span class="p">(</span><span class="n">li</span><span class="o">-&gt;</span><span class="n">tail</span> <span class="o">==</span> <span class="n">li</span><span class="o">-&gt;</span><span class="n">tail</span><span class="o">-&gt;</span><span class="n">next</span><span class="p">)</span>
		<span class="p">{</span>
			<span class="n">li</span><span class="o">-&gt;</span><span class="n">head</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
			<span class="n">li</span><span class="o">-&gt;</span><span class="n">tail</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
		<span class="p">}</span>
		<span class="k">else</span>
		<span class="p">{</span>
			<span class="n">li</span><span class="o">-&gt;</span><span class="n">tail</span> <span class="o">=</span> <span class="n">li</span><span class="o">-&gt;</span><span class="n">brefore</span><span class="p">;</span>
		<span class="p">}</span>
	<span class="p">}</span>
	<span class="n">li</span><span class="o">-&gt;</span><span class="n">brefore</span><span class="o">-&gt;</span><span class="n">next</span> <span class="o">=</span> <span class="n">li</span><span class="o">-&gt;</span><span class="n">cur</span><span class="o">-&gt;</span><span class="n">next</span><span class="p">;</span>
	<span class="n">li</span><span class="o">-&gt;</span><span class="n">cur</span> <span class="o">=</span> <span class="n">li</span><span class="o">-&gt;</span><span class="n">brefore</span><span class="p">;</span>
	<span class="n">free</span><span class="p">(</span><span class="n">temp</span><span class="p">);</span>
<span class="p">}</span>


<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
	<span class="kt">int</span> <span class="n">num</span><span class="p">;</span>
	<span class="n">scanf</span><span class="p">(</span><span class="s">"%d"</span><span class="p">,</span><span class="o">&amp;</span><span class="n">num</span><span class="p">;</span>
	
	<span class="n">List</span> <span class="n">li</span><span class="p">;</span>
	<span class="n">init</span><span class="p">(</span><span class="o">&amp;</span><span class="n">li</span><span class="p">);</span>
	
	<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span><span class="n">i</span><span class="o">&lt;=</span><span class="n">num</span><span class="p">;</span><span class="n">i</span><span class="o">++</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="n">Insert_node</span><span class="p">(</span><span class="o">&amp;</span><span class="n">li</span><span class="p">,</span><span class="n">i</span><span class="p">);</span>
	<span class="p">}</span>
	
	<span class="n">Cur_init</span><span class="p">(</span><span class="o">&amp;</span><span class="n">li</span><span class="p">);</span>
	
	<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>

</code></pre></div></div>]]></content><author><name>Kieran oh</name></author><category term="DataStructure" /><category term="DataStructure" /><category term="List" /><category term="Circular_Linked_list" /><summary type="html"><![CDATA[Circular Linked List]]></summary></entry><entry><title type="html">Deque</title><link href="https://kieranoh.github.io/datastructure/deque/" rel="alternate" type="text/html" title="Deque" /><published>2023-10-15T00:00:00+00:00</published><updated>2023-10-15T00:00:00+00:00</updated><id>https://kieranoh.github.io/datastructure/deque</id><content type="html" xml:base="https://kieranoh.github.io/datastructure/deque/"><![CDATA[<h1 id="queue">Queue</h1>

<p>이번 목표는 자료구조중 하나인 Deque를 c 언어로 구현하는 것 이다. Deque의 경우 흔히 덱 이라고 부르는데, 이는 기존 큐랑 다르게 앞, 뒤에서 다 출력이 가능하다.</p>

<h2 id="기능">기능</h2>

<p>큐에 기본 기능들은 init, push, pop, size, empty, front, back이다.</p>

<p>init -&gt; 덱 초기화</p>

<p>push front -&gt; 데이터를 가장 앞에 삽입</p>

<p>push back -&gt; 데이터를 가장 뒤에 삽입</p>

<p>pop front-&gt; 가장 앞 데이터 추출</p>

<p>pop back -&gt; 가장 뒤 데이터 추출</p>

<p>size -&gt; 큐 크기 확인</p>

<p>empty -&gt; 큐가 비어있는지 유무 확인</p>

<p>front -&gt; 가장 앞에 데이터 확인</p>

<p>back -&gt; 가장 뒤에 있는 데이터 확인</p>

<h2 id="구현">구현</h2>

<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include</span> <span class="cpf">&lt;stdio.h&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;string.h&gt;</span><span class="cp">
#define SIZE 10000
</span>
<span class="k">typedef</span> <span class="k">struct</span><span class="p">{</span>
	<span class="kt">int</span> <span class="n">arr</span><span class="p">[</span><span class="n">SIZE</span><span class="p">];</span>
	<span class="kt">int</span> <span class="n">front</span><span class="p">;</span>
	<span class="kt">int</span> <span class="n">back</span><span class="p">;</span>
<span class="p">}</span><span class="n">Deque</span><span class="p">;</span>

<span class="kt">void</span> <span class="nf">init</span><span class="p">(</span><span class="n">Deque</span> <span class="o">*</span><span class="n">d</span><span class="p">)</span>
<span class="p">{</span>
	<span class="n">d</span><span class="o">-&gt;</span><span class="n">front</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
	<span class="n">d</span><span class="o">-&gt;</span><span class="n">back</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
	<span class="k">return</span><span class="p">;</span>
<span class="p">}</span>

<span class="kt">int</span> <span class="nf">empty</span><span class="p">(</span><span class="n">Deque</span> <span class="o">*</span><span class="n">d</span><span class="p">)</span>
<span class="p">{</span>
	<span class="k">return</span><span class="p">(</span><span class="n">d</span><span class="o">-&gt;</span><span class="n">front</span> <span class="o">==</span> <span class="n">d</span><span class="o">-&gt;</span><span class="n">back</span><span class="p">);</span>
<span class="p">}</span>


<span class="kt">void</span> <span class="nf">push_front</span><span class="p">(</span><span class="n">Deque</span> <span class="o">*</span><span class="n">d</span><span class="p">,</span> <span class="kt">int</span> <span class="n">num</span><span class="p">)</span>
<span class="p">{</span>
	<span class="n">d</span><span class="o">-&gt;</span><span class="n">arr</span><span class="p">[</span><span class="n">d</span><span class="o">-&gt;</span><span class="n">front</span><span class="p">]</span> <span class="o">=</span> <span class="n">num</span><span class="p">;</span>
	<span class="n">d</span><span class="o">-&gt;</span><span class="n">front</span> <span class="o">=</span> <span class="p">(</span><span class="n">d</span><span class="o">-&gt;</span><span class="n">front</span> <span class="o">+</span> <span class="n">SIZE</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="n">SIZE</span><span class="p">;</span>
	<span class="k">return</span><span class="p">;</span>
<span class="p">}</span>

<span class="kt">void</span> <span class="nf">push_back</span><span class="p">(</span><span class="n">Deque</span> <span class="o">*</span><span class="n">d</span><span class="p">,</span> <span class="kt">int</span> <span class="n">num</span><span class="p">)</span>
<span class="p">{</span>
	<span class="n">d</span><span class="o">-&gt;</span><span class="n">back</span> <span class="o">=</span> <span class="p">(</span><span class="n">d</span><span class="o">-&gt;</span><span class="n">back</span> <span class="o">+</span><span class="mi">1</span><span class="p">)</span> <span class="o">%</span><span class="n">SIZE</span><span class="p">;</span>
	<span class="n">d</span><span class="o">-&gt;</span><span class="n">arr</span><span class="p">[</span><span class="n">d</span><span class="o">-&gt;</span><span class="n">back</span><span class="p">]</span> <span class="o">=</span> <span class="n">num</span><span class="p">;</span>
	<span class="k">return</span><span class="p">;</span>
<span class="p">}</span>

<span class="kt">int</span> <span class="nf">pop_front</span><span class="p">(</span><span class="n">Deque</span> <span class="o">*</span><span class="n">d</span><span class="p">)</span>
<span class="p">{</span>
	<span class="k">if</span><span class="p">(</span><span class="n">empty</span> <span class="p">(</span><span class="n">d</span><span class="p">))</span>
	<span class="p">{</span>
		<span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
	<span class="p">}</span>
	<span class="n">d</span><span class="o">-&gt;</span><span class="n">front</span> <span class="o">=</span> <span class="p">(</span><span class="n">d</span><span class="o">-&gt;</span><span class="n">front</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> <span class="o">%</span><span class="n">SIZE</span><span class="p">;</span>
	<span class="kt">int</span> <span class="n">temp</span> <span class="o">=</span> <span class="n">d</span><span class="o">-&gt;</span><span class="n">arr</span><span class="p">[</span><span class="n">d</span><span class="o">-&gt;</span><span class="n">front</span><span class="p">];</span>
	<span class="k">return</span> <span class="n">temp</span><span class="p">;</span>
<span class="p">}</span>

<span class="kt">int</span> <span class="nf">pop_back</span><span class="p">(</span><span class="n">Deque</span> <span class="o">*</span><span class="n">d</span><span class="p">)</span>
<span class="p">{</span>
	<span class="k">if</span><span class="p">(</span><span class="n">empty</span> <span class="p">(</span><span class="n">d</span><span class="p">))</span>
	<span class="p">{</span>
		<span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
	<span class="p">}</span>
	<span class="kt">int</span> <span class="n">temp</span> <span class="o">=</span> <span class="n">d</span><span class="o">-&gt;</span><span class="n">arr</span><span class="p">[</span><span class="n">d</span><span class="o">-&gt;</span><span class="n">back</span><span class="p">];</span>
	<span class="n">d</span><span class="o">-&gt;</span><span class="n">back</span> <span class="o">=</span> <span class="p">(</span><span class="n">d</span><span class="o">-&gt;</span><span class="n">back</span> <span class="o">+</span> <span class="n">SIZE</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="o">%</span><span class="n">SIZE</span><span class="p">;</span>
	
	<span class="k">return</span> <span class="n">temp</span><span class="p">;</span>
<span class="p">}</span>

<span class="kt">int</span> <span class="nf">size</span><span class="p">(</span><span class="n">Deque</span> <span class="o">*</span><span class="n">d</span><span class="p">)</span>
<span class="p">{</span>
	<span class="k">return</span> <span class="p">(</span><span class="n">d</span><span class="o">-&gt;</span><span class="n">back</span> <span class="o">-</span> <span class="n">d</span><span class="o">-&gt;</span><span class="n">front</span> <span class="o">+</span> <span class="n">SIZE</span> <span class="p">)</span><span class="o">%</span><span class="n">SIZE</span><span class="p">;</span>
<span class="p">}</span>

<span class="kt">int</span> <span class="nf">front</span><span class="p">(</span><span class="n">Deque</span> <span class="o">*</span><span class="n">d</span><span class="p">)</span>
<span class="p">{</span>
	<span class="k">if</span><span class="p">(</span><span class="n">empty</span> <span class="p">(</span><span class="n">d</span><span class="p">))</span>
	<span class="p">{</span>
		<span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
	<span class="p">}</span>
	<span class="kt">int</span> <span class="n">temp</span> <span class="o">=</span> <span class="p">(</span><span class="n">d</span><span class="o">-&gt;</span><span class="n">front</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">%</span><span class="n">SIZE</span><span class="p">;</span>
	<span class="k">return</span> <span class="n">d</span><span class="o">-&gt;</span><span class="n">arr</span><span class="p">[</span><span class="n">temp</span><span class="p">];</span>
<span class="p">}</span>

<span class="kt">int</span> <span class="nf">back</span><span class="p">(</span><span class="n">Deque</span> <span class="o">*</span><span class="n">d</span><span class="p">)</span>
<span class="p">{</span>
	<span class="k">if</span><span class="p">(</span><span class="n">empty</span> <span class="p">(</span><span class="n">d</span><span class="p">))</span>
	<span class="p">{</span>
		<span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
	<span class="p">}</span>
	<span class="k">return</span> <span class="n">d</span><span class="o">-&gt;</span><span class="n">arr</span><span class="p">[</span><span class="n">d</span><span class="o">-&gt;</span><span class="n">back</span><span class="p">];</span>
<span class="p">}</span>

<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
	<span class="kt">int</span> <span class="n">Tc</span><span class="p">;</span>
	<span class="kt">int</span> <span class="n">num</span><span class="p">;</span>
	<span class="kt">char</span> <span class="n">input</span><span class="p">[</span><span class="mi">12</span><span class="p">];</span>
	<span class="n">Deque</span> <span class="n">d</span><span class="p">;</span>
	<span class="n">init</span><span class="p">(</span><span class="o">&amp;</span><span class="n">d</span><span class="p">);</span>
	
	<span class="n">scanf</span><span class="p">(</span><span class="s">"%d"</span><span class="p">,</span><span class="o">&amp;</span><span class="n">Tc</span><span class="p">);</span>
	
	<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span><span class="o">&lt;</span><span class="n">Tc</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="n">scanf</span><span class="p">(</span><span class="s">"%s"</span><span class="p">,</span><span class="o">&amp;</span><span class="n">input</span><span class="p">);</span>
		<span class="k">if</span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">input</span><span class="p">,</span><span class="s">"push_front"</span><span class="p">)</span><span class="o">==</span><span class="mi">0</span><span class="p">)</span>
		<span class="p">{</span>
			<span class="n">scanf</span><span class="p">(</span><span class="s">"%d"</span><span class="p">,</span><span class="o">&amp;</span><span class="n">num</span><span class="p">);</span>
			<span class="n">push_front</span><span class="p">(</span><span class="o">&amp;</span><span class="n">d</span><span class="p">,</span><span class="n">num</span><span class="p">);</span>
		<span class="p">}</span>
		<span class="k">else</span> <span class="k">if</span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">input</span><span class="p">,</span><span class="s">"push_back"</span><span class="p">)</span><span class="o">==</span><span class="mi">0</span><span class="p">)</span>
		<span class="p">{</span>
			<span class="n">scanf</span><span class="p">(</span><span class="s">"%d"</span><span class="p">,</span><span class="o">&amp;</span><span class="n">num</span><span class="p">);</span>
			<span class="n">push_back</span><span class="p">(</span><span class="o">&amp;</span><span class="n">d</span><span class="p">,</span><span class="n">num</span><span class="p">);</span>
		<span class="p">}</span>
		<span class="k">else</span> <span class="k">if</span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">input</span><span class="p">,</span><span class="s">"pop_front"</span><span class="p">)</span><span class="o">==</span><span class="mi">0</span><span class="p">)</span>
		<span class="p">{</span>
			<span class="n">printf</span><span class="p">(</span><span class="s">"%d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="n">pop_front</span><span class="p">(</span><span class="o">&amp;</span><span class="n">d</span><span class="p">));</span>
		<span class="p">}</span>
		<span class="k">else</span> <span class="k">if</span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">input</span><span class="p">,</span><span class="s">"pop_back"</span><span class="p">)</span><span class="o">==</span><span class="mi">0</span><span class="p">)</span>
		<span class="p">{</span>
			<span class="n">printf</span><span class="p">(</span><span class="s">"%d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="n">pop_back</span><span class="p">(</span><span class="o">&amp;</span><span class="n">d</span><span class="p">));</span>
		<span class="p">}</span>
		<span class="k">else</span> <span class="k">if</span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">input</span><span class="p">,</span><span class="s">"size"</span><span class="p">)</span><span class="o">==</span><span class="mi">0</span><span class="p">)</span>
		<span class="p">{</span>
			<span class="n">printf</span><span class="p">(</span><span class="s">"%d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="n">size</span><span class="p">(</span><span class="o">&amp;</span><span class="n">d</span><span class="p">));</span>
		<span class="p">}</span>
		<span class="k">else</span> <span class="k">if</span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">input</span><span class="p">,</span><span class="s">"empty"</span><span class="p">)</span><span class="o">==</span><span class="mi">0</span><span class="p">)</span>
		<span class="p">{</span>
			<span class="n">printf</span><span class="p">(</span><span class="s">"%d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="n">empty</span><span class="p">(</span><span class="o">&amp;</span><span class="n">d</span><span class="p">));</span>
		<span class="p">}</span>
		<span class="k">else</span> <span class="k">if</span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">input</span><span class="p">,</span><span class="s">"front"</span><span class="p">)</span><span class="o">==</span><span class="mi">0</span><span class="p">)</span>
		<span class="p">{</span>
			<span class="n">printf</span><span class="p">(</span><span class="s">"%d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="n">front</span><span class="p">(</span><span class="o">&amp;</span><span class="n">d</span><span class="p">));</span>
		<span class="p">}</span>
		<span class="k">else</span> <span class="k">if</span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">input</span><span class="p">,</span><span class="s">"back"</span><span class="p">)</span><span class="o">==</span><span class="mi">0</span><span class="p">)</span>
		<span class="p">{</span>
			<span class="n">printf</span><span class="p">(</span><span class="s">"%d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="n">back</span><span class="p">(</span><span class="o">&amp;</span><span class="n">d</span><span class="p">));</span>
		<span class="p">}</span>
	<span class="p">}</span>
	<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>

</code></pre></div></div>]]></content><author><name>Kieran oh</name></author><category term="DataStructure" /><category term="DataStructure" /><category term="Deque" /><summary type="html"><![CDATA[Queue]]></summary></entry><entry><title type="html">Queue</title><link href="https://kieranoh.github.io/datastructure/queue/" rel="alternate" type="text/html" title="Queue" /><published>2023-10-15T00:00:00+00:00</published><updated>2023-10-15T00:00:00+00:00</updated><id>https://kieranoh.github.io/datastructure/queue</id><content type="html" xml:base="https://kieranoh.github.io/datastructure/queue/"><![CDATA[<h1 id="queue">Queue</h1>

<p>이번 목표는 자료구조중 하나인 Queue를 c 언어로 구현하는 것 이다. Queue의 경우 Stack이랑 다르게 선입 <b>선출(FIFO, First in First Out)</b>을 사용한다. 대기줄이라고 생각을 하면 편하다.</p>

<h2 id="기능">기능</h2>

<p>큐에 기본 기능들은 init, push, pop, size, empty, front, back이다.</p>

<p>init -&gt; 큐 초기화</p>

<p>push -&gt; 데이터를 가장 뒤에 삽입</p>

<p>pop -&gt; 가장 앞 데이터 추출</p>

<p>size -&gt; 큐 크기 확인</p>

<p>empty -&gt; 큐가 비어있는지 유무 확인</p>

<p>front -&gt; 가장 앞에 데이터 확인</p>

<p>back -&gt; 가장 뒤에 있는 데이터 확인</p>

<h2 id="구현">구현</h2>

<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include</span> <span class="cpf">&lt;stdio.h&gt;</span><span class="cp">
</span>
<span class="k">typedef</span> <span class="k">struct</span> <span class="p">{</span>
	<span class="kt">int</span> <span class="n">arr</span><span class="p">[</span><span class="mi">10000</span><span class="p">];</span>
	<span class="kt">int</span> <span class="n">front</span><span class="p">;</span>
	<span class="kt">int</span> <span class="n">back</span><span class="p">;</span>
<span class="p">}</span><span class="n">Queue</span><span class="p">;</span>

<span class="kt">int</span> <span class="nf">init</span><span class="p">(</span><span class="n">Queue</span> <span class="o">*</span><span class="n">q</span><span class="p">)</span>
<span class="p">{</span>
	<span class="n">q</span><span class="o">-&gt;</span><span class="n">front</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span>	
	<span class="n">q</span><span class="o">-&gt;</span><span class="n">back</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>

<span class="kt">void</span> <span class="nf">push</span><span class="p">(</span><span class="n">Queue</span> <span class="o">*</span><span class="n">q</span><span class="p">,</span> <span class="kt">int</span> <span class="n">num</span><span class="p">)</span>
<span class="p">{</span>
	<span class="n">q</span><span class="o">-&gt;</span><span class="n">arr</span><span class="p">[</span><span class="n">q</span><span class="o">-&gt;</span><span class="n">back</span><span class="o">++</span><span class="p">]</span> <span class="o">=</span> <span class="n">num</span><span class="p">;</span>
	
<span class="p">}</span>

<span class="kt">int</span> <span class="nf">pop</span><span class="p">(</span><span class="n">Queue</span> <span class="o">*</span><span class="n">q</span><span class="p">)</span>
<span class="p">{</span>
	<span class="k">if</span><span class="p">(</span><span class="n">empty</span><span class="p">(</span><span class="n">q</span><span class="p">)</span><span class="o">==</span><span class="mi">1</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="n">printf</span><span class="p">(</span><span class="s">"pop</span><span class="se">\n</span><span class="s">queue is empty</span><span class="se">\n</span><span class="s">________</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
		<span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
	<span class="p">}</span>
	<span class="n">printf</span><span class="p">(</span><span class="s">"pop</span><span class="se">\n</span><span class="s"> %d</span><span class="se">\n</span><span class="s">________</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="n">q</span><span class="o">-&gt;</span><span class="n">arr</span><span class="p">[</span><span class="n">q</span><span class="o">-&gt;</span><span class="n">front</span><span class="p">]);</span>
	<span class="k">return</span> <span class="n">q</span><span class="o">-&gt;</span><span class="n">arr</span><span class="p">[</span><span class="n">q</span><span class="o">-&gt;</span><span class="n">front</span><span class="o">++</span><span class="p">];</span>
<span class="p">}</span>

<span class="kt">int</span> <span class="nf">size</span><span class="p">(</span><span class="n">Queue</span> <span class="o">*</span><span class="n">q</span><span class="p">)</span>
<span class="p">{</span>
	<span class="n">printf</span><span class="p">(</span><span class="s">"size</span><span class="se">\n</span><span class="s">size is %d</span><span class="se">\n</span><span class="s">________</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="n">q</span><span class="o">-&gt;</span><span class="n">back</span> <span class="o">-</span> <span class="n">q</span><span class="o">-&gt;</span><span class="n">front</span><span class="p">);</span>
	<span class="k">return</span> <span class="n">q</span><span class="o">-&gt;</span><span class="n">back</span> <span class="o">-</span> <span class="n">q</span><span class="o">-&gt;</span><span class="n">front</span><span class="p">;</span>
<span class="p">}</span>

<span class="kt">int</span> <span class="nf">empty</span><span class="p">(</span><span class="n">Queue</span> <span class="o">*</span><span class="n">q</span><span class="p">)</span>
<span class="p">{</span>
	<span class="k">if</span><span class="p">(</span><span class="n">q</span><span class="o">-&gt;</span><span class="n">front</span><span class="o">==</span><span class="n">q</span><span class="o">-&gt;</span><span class="n">back</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="n">printf</span><span class="p">(</span><span class="s">"empty</span><span class="se">\n</span><span class="s">queue is empty</span><span class="se">\n</span><span class="s">_______</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
		<span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
	<span class="p">}</span>
	<span class="n">printf</span><span class="p">(</span><span class="s">"empty</span><span class="se">\n</span><span class="s">queue is not empty</span><span class="se">\n</span><span class="s">______</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
	<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>

<span class="kt">int</span> <span class="nf">front</span><span class="p">(</span><span class="n">Queue</span> <span class="o">*</span><span class="n">q</span><span class="p">)</span>
<span class="p">{</span>
	<span class="k">if</span><span class="p">(</span><span class="n">empty</span><span class="p">(</span><span class="n">q</span><span class="p">)</span><span class="o">==</span><span class="mi">1</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="n">printf</span><span class="p">(</span><span class="s">"front</span><span class="se">\n</span><span class="s">queue is empty</span><span class="se">\n</span><span class="s">________</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
		<span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
	<span class="p">}</span>
	<span class="n">printf</span><span class="p">(</span><span class="s">"front</span><span class="se">\n</span><span class="s"> %d</span><span class="se">\n</span><span class="s">________</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="n">q</span><span class="o">-&gt;</span><span class="n">arr</span><span class="p">[</span><span class="n">q</span><span class="o">-&gt;</span><span class="n">front</span><span class="p">]);</span>
	<span class="k">return</span> <span class="n">q</span><span class="o">-&gt;</span><span class="n">arr</span><span class="p">[</span><span class="n">q</span><span class="o">-&gt;</span><span class="n">front</span><span class="p">];</span>
<span class="p">}</span>

<span class="kt">int</span> <span class="nf">back</span><span class="p">(</span><span class="n">Queue</span> <span class="o">*</span><span class="n">q</span><span class="p">)</span>
<span class="p">{</span>
	<span class="k">if</span><span class="p">(</span><span class="n">empty</span><span class="p">(</span><span class="n">q</span><span class="p">)</span><span class="o">==</span><span class="mi">1</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="n">printf</span><span class="p">(</span><span class="s">"back</span><span class="se">\n</span><span class="s">queue is empty</span><span class="se">\n</span><span class="s">________</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
		<span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
	<span class="p">}</span>
	<span class="n">printf</span><span class="p">(</span><span class="s">"back</span><span class="se">\n</span><span class="s"> %d</span><span class="se">\n</span><span class="s">________</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="n">q</span><span class="o">-&gt;</span><span class="n">arr</span><span class="p">[</span><span class="n">q</span><span class="o">-&gt;</span><span class="n">back</span> <span class="o">-</span><span class="mi">1</span><span class="p">]);</span>
	<span class="k">return</span> <span class="n">q</span><span class="o">-&gt;</span><span class="n">arr</span><span class="p">[</span><span class="n">q</span><span class="o">-&gt;</span><span class="n">back</span><span class="o">-</span><span class="mi">1</span><span class="p">];</span>
<span class="p">}</span>


<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
	<span class="n">Queue</span> <span class="n">q</span><span class="p">;</span>
	<span class="n">init</span><span class="p">(</span><span class="o">&amp;</span><span class="n">q</span><span class="p">);</span>
	<span class="n">push</span><span class="p">(</span><span class="o">&amp;</span><span class="n">q</span><span class="p">,</span><span class="mi">2</span><span class="p">);</span>
	<span class="n">push</span><span class="p">(</span><span class="o">&amp;</span><span class="n">q</span><span class="p">,</span><span class="mi">4</span><span class="p">);</span>
	<span class="n">push</span><span class="p">(</span><span class="o">&amp;</span><span class="n">q</span><span class="p">,</span><span class="mi">6</span><span class="p">);</span>
	<span class="n">pop</span><span class="p">(</span><span class="o">&amp;</span><span class="n">q</span><span class="p">);</span>
	<span class="n">size</span><span class="p">(</span><span class="o">&amp;</span><span class="n">q</span><span class="p">);</span>
	<span class="n">empty</span><span class="p">(</span><span class="o">&amp;</span><span class="n">q</span><span class="p">);</span>
	<span class="n">back</span><span class="p">(</span><span class="o">&amp;</span><span class="n">q</span><span class="p">);</span>
	<span class="n">front</span><span class="p">(</span><span class="o">&amp;</span><span class="n">q</span><span class="p">);</span>
	<span class="n">pop</span><span class="p">(</span><span class="o">&amp;</span><span class="n">q</span><span class="p">);</span>
	<span class="n">pop</span><span class="p">(</span><span class="o">&amp;</span><span class="n">q</span><span class="p">);</span>
	<span class="n">pop</span><span class="p">(</span><span class="o">&amp;</span><span class="n">q</span><span class="p">);</span>
	
	<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>

</code></pre></div></div>

<p>결과</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pop
 2
________
size
size is 2
________
empty
queue is not empty
______
back
 6
________
front
 4
________
pop
 4
________
pop
 6
________
pop
queue is empty
________
</code></pre></div></div>]]></content><author><name>Kieran oh</name></author><category term="DataStructure" /><category term="DataStructure" /><category term="Queue" /><summary type="html"><![CDATA[Queue]]></summary></entry><entry><title type="html">Binary Search</title><link href="https://kieranoh.github.io/datastructure/binary-search/" rel="alternate" type="text/html" title="Binary Search" /><published>2023-10-01T00:00:00+00:00</published><updated>2023-10-01T00:00:00+00:00</updated><id>https://kieranoh.github.io/datastructure/binary-search</id><content type="html" xml:base="https://kieranoh.github.io/datastructure/binary-search/"><![CDATA[<h1 id="binary-search">Binary Search</h1>

<p>이번 목표는 탐색 기법중 하나인 Binary Search(이진 검색)를 C언어로 구현하는 것 이다.</p>

<p>이진 검색을 사용하기 위해 사용되는 배열은 정렬된 상태여야한다.</p>

<p>이 알고리즘은 반씩 나눠서 검색을 반복하는것이다</p>

<h2 id="설명">설명</h2>

<p>중간 index인 mid 를 설정해주고, 찾고 싶은 값이 mid 보다 크면 mid+1와 가장 우측 값 사이에서 다시 반을 나누고, 작다면 가장 왼쪽 값과 mid 사이에서 반을 나눈다. 원하는 값이 나올때 까지 반복을 하고 왼쪽 index와 오른쪽 index가 같으면 탐색을 멈춘다</p>

<h2 id="구현">구현</h2>

<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include</span> <span class="cpf">&lt;stdio.h&gt;</span><span class="cp">
</span>
<span class="kt">int</span> <span class="nf">binary_search</span><span class="p">(</span><span class="kt">int</span> <span class="o">*</span><span class="n">arr</span><span class="p">,</span><span class="kt">int</span> <span class="n">target</span><span class="p">,</span> <span class="kt">int</span> <span class="n">size</span><span class="p">)</span>
<span class="p">{</span>
	<span class="k">if</span><span class="p">(</span><span class="n">arr</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">&gt;</span><span class="n">target</span> <span class="o">||</span> <span class="n">arr</span><span class="p">[</span><span class="n">size</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">&lt;</span> <span class="n">target</span><span class="p">)</span>
	<span class="p">{</span>
		
		<span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
	<span class="p">}</span>
	<span class="c1">// 최대 최소를 통해 미리 찾기</span>
	
	<span class="kt">int</span> <span class="n">left</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
	<span class="kt">int</span> <span class="n">right</span> <span class="o">=</span> <span class="n">size</span><span class="o">-</span><span class="mi">1</span><span class="p">;</span>
	<span class="kt">int</span> <span class="n">mid</span><span class="p">;</span>
	
	<span class="k">while</span><span class="p">(</span><span class="n">left</span><span class="o">&lt;=</span><span class="n">right</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="n">mid</span> <span class="o">=</span><span class="p">(</span><span class="n">left</span><span class="o">+</span><span class="n">right</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span><span class="p">;</span>
		<span class="k">if</span><span class="p">(</span><span class="n">arr</span><span class="p">[</span><span class="n">mid</span><span class="p">]</span><span class="o">==</span><span class="n">target</span><span class="p">)</span>
		<span class="p">{</span>
			<span class="k">return</span> <span class="n">mid</span><span class="p">;</span>
		<span class="p">}</span>
		<span class="k">if</span><span class="p">(</span><span class="n">arr</span><span class="p">[</span><span class="n">mid</span><span class="p">]</span><span class="o">&lt;</span><span class="n">target</span><span class="p">)</span>
		<span class="p">{</span>
			<span class="n">left</span> <span class="o">=</span> <span class="n">mid</span><span class="o">+</span><span class="mi">1</span><span class="p">;</span>
			<span class="c1">//mid보다 크다면 우측 절반을 다시 찾기</span>
		<span class="p">}</span>
		<span class="k">else</span>
		<span class="p">{</span>
			<span class="n">right</span> <span class="o">=</span> <span class="n">mid</span><span class="o">-</span><span class="mi">1</span><span class="p">;</span>
		<span class="p">}</span>
	<span class="p">}</span>
	
<span class="p">}</span>

<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
	<span class="kt">int</span> <span class="n">arr</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="mi">2</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">6</span><span class="p">,</span><span class="mi">10</span><span class="p">,</span><span class="mi">45</span><span class="p">,</span><span class="mi">95</span><span class="p">};</span>
	
	<span class="n">printf</span><span class="p">(</span><span class="s">"array is </span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
	<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span><span class="n">i</span><span class="o">&lt;</span><span class="mi">6</span><span class="p">;</span><span class="n">i</span><span class="o">++</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="n">printf</span><span class="p">(</span><span class="s">"%d  "</span><span class="p">,</span><span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span>
	<span class="p">}</span>
	<span class="n">printf</span><span class="p">(</span><span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
	
	<span class="kt">int</span> <span class="n">target</span> <span class="o">=</span> <span class="mi">6</span><span class="p">;</span>
	<span class="kt">int</span> <span class="n">result</span> <span class="o">=</span> <span class="n">binary_search</span><span class="p">(</span><span class="n">arr</span><span class="p">,</span><span class="n">target</span><span class="p">,</span><span class="mi">6</span><span class="p">);</span>
	<span class="n">printf</span><span class="p">(</span><span class="s">"target is %d ,it is in %d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="n">target</span><span class="p">,</span><span class="n">result</span><span class="p">);</span>
	
	<span class="n">target</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
	<span class="n">result</span> <span class="o">=</span> <span class="n">binary_search</span><span class="p">(</span><span class="n">arr</span><span class="p">,</span><span class="n">target</span><span class="p">,</span><span class="mi">6</span><span class="p">);</span>
	<span class="n">printf</span><span class="p">(</span><span class="s">"target is %d ,it is in %d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="n">target</span><span class="p">,</span><span class="n">result</span><span class="p">);</span>
	
	<span class="n">result</span> <span class="o">=</span> <span class="n">binary_search</span><span class="p">(</span><span class="n">arr</span><span class="p">,</span><span class="n">target</span><span class="p">,</span><span class="mi">6</span><span class="p">);</span>
	<span class="n">target</span> <span class="o">=</span> <span class="mi">13</span><span class="p">;</span>
	<span class="n">printf</span><span class="p">(</span><span class="s">"target is %d ,it is in %d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="n">target</span><span class="p">,</span><span class="n">result</span><span class="p">);</span>
	
	<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
	
<span class="p">}</span>

</code></pre></div></div>

<p>결과</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>array is
2  4  6  10  45  95
target is 6 ,it is in 2
target is 1 ,it is in -1
target is 13 ,it is in -1
</code></pre></div></div>]]></content><author><name>Kieran oh</name></author><category term="DataStructure" /><category term="DataStructure" /><category term="Search" /><category term="Binary-search" /><summary type="html"><![CDATA[Binary Search]]></summary></entry><entry><title type="html">Quick Sort</title><link href="https://kieranoh.github.io/datastructure/quick-sort/" rel="alternate" type="text/html" title="Quick Sort" /><published>2023-10-01T00:00:00+00:00</published><updated>2023-10-01T00:00:00+00:00</updated><id>https://kieranoh.github.io/datastructure/quick-sort</id><content type="html" xml:base="https://kieranoh.github.io/datastructure/quick-sort/"><![CDATA[<h1 id="quick-sort">Quick Sort</h1>

<p>이번 목표는 Sorting 기법중 하나인 Quick Sort를 C언어로 구현하는것이다.</p>

<p>Quick Sort는 병합정렬과 비슷한 로직으로 기준이 되는 pivot을 기준으로 앞,뒤 배열을 쪼개어 기준값보다 작은 값을 앞으로, 큰값은 뒤로 보내어 재귀함수를 통해 정렬하는 방식이다.</p>

<p>시간 복잡도 O(nlongn)</p>

<p>공간복잡도 O(n)</p>

<h2 id="설명">설명</h2>

<p>중간값을 pivot으로 설정을 한다면 왼쪽값을 left 오른쪽을 right로 설정한다. (L과 R은 index이다)</p>

<p>각각 반대 방향으로 이동하고, left는 기준보다 큰수, right는 기준보다 작은수를 만나면 멈추고 swap한다.</p>

<p>위 과정을 left가 right보다 오른쪽에 올 때까지 반복하고 반복한다.</p>

<h2 id="구현">구현</h2>

<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include</span> <span class="cpf">&lt;stdio.h&gt;</span><span class="cp">
</span>
<span class="kt">void</span> <span class="nf">quick_sort</span><span class="p">(</span><span class="kt">int</span> <span class="o">*</span><span class="n">arr</span><span class="p">,</span><span class="kt">int</span> <span class="n">L</span><span class="p">,</span><span class="kt">int</span> <span class="n">R</span><span class="p">)</span>
<span class="p">{</span>
	<span class="kt">int</span> <span class="n">left</span> <span class="o">=</span> <span class="n">L</span><span class="p">;</span>
	<span class="kt">int</span> <span class="n">right</span> <span class="o">=</span> <span class="n">R</span><span class="p">;</span>
	<span class="kt">int</span> <span class="n">p</span> <span class="o">=</span> <span class="n">arr</span><span class="p">[(</span><span class="n">L</span><span class="o">+</span><span class="n">R</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span><span class="p">];</span> <span class="c1">//pivot 설정 (가운데 기준값)</span>
	<span class="kt">int</span> <span class="n">temp</span><span class="p">;</span><span class="c1">//swap 용 temp</span>

	<span class="k">do</span>
	<span class="p">{</span>
		<span class="k">while</span><span class="p">(</span><span class="n">arr</span><span class="p">[</span><span class="n">left</span><span class="p">]</span><span class="o">&lt;</span><span class="n">p</span><span class="p">)</span>
		<span class="p">{</span>
			<span class="n">left</span><span class="o">++</span><span class="p">;</span>
		<span class="p">}</span>
		<span class="k">while</span><span class="p">(</span><span class="n">arr</span><span class="p">[</span><span class="n">right</span><span class="p">]</span><span class="o">&gt;</span><span class="n">p</span><span class="p">)</span>
		<span class="p">{</span>
			<span class="n">right</span><span class="o">--</span><span class="p">;</span>
		<span class="p">}</span>
		<span class="k">if</span><span class="p">(</span><span class="n">left</span><span class="o">&lt;=</span><span class="n">right</span><span class="p">)</span>
		<span class="p">{</span>
			<span class="n">temp</span> <span class="o">=</span> <span class="n">arr</span><span class="p">[</span><span class="n">left</span><span class="p">];</span>
			<span class="n">arr</span><span class="p">[</span><span class="n">left</span><span class="p">]</span> <span class="o">=</span> <span class="n">arr</span><span class="p">[</span><span class="n">right</span><span class="p">];</span>
			<span class="n">arr</span><span class="p">[</span><span class="n">right</span><span class="p">]</span> <span class="o">=</span> <span class="n">temp</span><span class="p">;</span>
			<span class="n">left</span><span class="o">++</span><span class="p">;</span>
			<span class="n">right</span><span class="o">--</span><span class="p">;</span>			
		<span class="p">}</span>
	<span class="p">}</span><span class="k">while</span><span class="p">(</span><span class="n">left</span><span class="o">&lt;=</span><span class="n">right</span><span class="p">);</span>
	
	<span class="k">if</span><span class="p">(</span><span class="n">L</span><span class="o">&lt;</span><span class="n">right</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="n">quick_sort</span><span class="p">(</span><span class="n">arr</span><span class="p">,</span><span class="n">L</span><span class="p">,</span><span class="n">right</span><span class="p">);</span>
	<span class="p">}</span>
	<span class="k">if</span><span class="p">(</span><span class="n">left</span><span class="o">&lt;</span><span class="n">R</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="n">quick_sort</span><span class="p">(</span><span class="n">arr</span><span class="p">,</span><span class="n">left</span><span class="p">,</span><span class="n">R</span><span class="p">);</span>
	<span class="p">}</span>
<span class="p">}</span>

<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
	<span class="kt">int</span> <span class="n">arr</span><span class="p">[</span><span class="mi">10</span><span class="p">]</span><span class="o">=</span><span class="p">{</span><span class="mi">5</span><span class="p">,</span><span class="mi">7</span><span class="p">,</span><span class="mi">6</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">9</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">10</span><span class="p">};</span>
	<span class="n">printf</span><span class="p">(</span><span class="s">"before quick sort</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
	<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span><span class="o">&lt;</span><span class="mi">10</span><span class="p">;</span><span class="n">i</span><span class="o">++</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="n">printf</span><span class="p">(</span><span class="s">"%d  "</span><span class="p">,</span><span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span>
	<span class="p">}</span>
	<span class="n">printf</span><span class="p">(</span><span class="s">"</span><span class="se">\n</span><span class="s">after quick sort</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
	<span class="n">quick_sort</span><span class="p">(</span><span class="n">arr</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">10</span><span class="o">-</span><span class="mi">1</span><span class="p">);</span>
	<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span><span class="o">&lt;</span><span class="mi">10</span><span class="p">;</span><span class="n">i</span><span class="o">++</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="n">printf</span><span class="p">(</span><span class="s">"%d  "</span><span class="p">,</span><span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span>
	<span class="p">}</span>
	
	<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>

</code></pre></div></div>

<p>결과</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>before quick sort
5  7  6  8  9  1  3  2  4  10
after quick sort
1  2  3  4  5  6  7  8  9  10
</code></pre></div></div>]]></content><author><name>Kieran oh</name></author><category term="DataStructure" /><category term="DataStructure" /><category term="Sorting" /><category term="Quick-Sort" /><summary type="html"><![CDATA[Quick Sort]]></summary></entry></feed>