「データ構造」キューの基本概念と実装、スタック、比較(Python)
15299 ワード
以下の内容とコードはこれらの教材に基づいて整理された文章です.😊
Queue
1.生活の中でQ
生活の中で、行列を説明するために銀行ATMから預金を引き出すことがある.先に並んだ人が先に金を引き出す.これをキューの形式と見なすことができます.
2.キューの概念
キューデータ構造は、입구
および출구
から分離された円柱形状と同じである.
前に学習したスタックのFILO
(またはLIFO
:最初の出力)と比較する.スタックには1つのエントリしかありません.最初のエントリが最後に現れた構造であれば、キューには個別のエントリと出口があります.
前述したATM機の行、有名グルメ店の行列、列車がトンネルを出る順番など、先着順のFIFO
(First In First Out)が特徴です.
💡 スタック:最初の最初のアウトバウンドまたは最初のアウトバウンド
3.Qの原理
キューは両端に穿孔された構造であるため、1つのキューには
데이터 삽입
万個のキューしかなく、もう1つのキューには데이터 추출
万個のキューしかありません.データ挿入動作を
enQueue
と呼び、逆にデータ抽出動作をdeQueue
と呼ぶ.また、キューの重要な用語は
front(머리)
、rear(꼬리)
である.データを挿入すると、hutの後に新しいデータ(hut+1の位置)が挿入され、データを抽出すると、最初に入力したデータが取り出されなければならないため、ヘッダ位置が抽出されます.
💡 キュー内の用語:front、hut、enQueue、deQueue
💡 スタック用語:top、bottom、push、pop
1)データ挿入:enQueue
5つのキュースペースが空です.
すべてのキューが空の場合、前(ヘッダ)と後(テール)の値は同じで、-1でなければなりません.
front = rear = -1
データを挿入したら、backを右に1つ移動します.
では、後ろの値は0でしょう.データは0個の位置に挿入されます.
2)データ抽出:DeQueue
キューからのデータの抽出は、左端からのデータの抽出と同じです.
出口が1つしかないため、中間データを抽出することができず、一番左側のデータから抽出することができます.
一番左側のデータが抽出された場合、一番前のデータを左側に移動することが考えられます.なぜなら、それらは空であるからです.
この操作を実行しないと、前のスペースは空になり、後のスペースはそのままになります.ワークスペースがいっぱいだと勘違いしているため、データを挿入できません.
(whiteboardで手動操作...画像が間違っている場合は、コメントで教えてください.)😂)
4.単純実装キュー
1)データ挿入:enQueue
# 생성한 큐에 화사를 넣으려면 우선 rear를 1 증가 시킨 뒤, rear 위치에 데이터를 넣는다.
queue = [None, None, None, None, None] # 크기가 5인 빈 큐 준비
front = rear = -1 # 초깃값 설정
rear += 1 # rear를 1 증가 시키며 데이터 삽입
queue[rear] = '화사'
rear += 1
queue[rear] = '솔라'
rear += 1
queue[rear] = '문별'
print('-----큐 상태-----')
print('[출구]<--', end = ' ')
for i in range(0, len(queue), 1):
print(queue[i], end=' ')
print('<--[입구]')
出力結果-----큐 상태-----
[출구]<-- 화사 솔라 문별 None None <--[입구]
2)データ抽出:DeQueue
# 데이터가 3개 있는 큐에서 데이터를 추출하려면 front를 1 증가시킨 후
# front 위치의 데이터를 밖으로 추출하고 front 위치의 데이터는 None으로 만든다.
queue = ['화사', '솔라', '문별', None, None] # 테스트용 큐
front = -1
rear = 2
# 데이터 추출 이전의 큐 상태 확인
print("----큐 상태-----")
print('[출구] <---', end = ' ')
for i in range(0, len(queue)):
print(queue[i], end=' ')
print('<-- [입구]')
print('----------------')
front += 1 # front 위치를 오른쪽으로 증가
data = queue[front] # 현재 front 위치의 데이터 추출
queue[front] = None # front에 None을 넣어서 데이터 삭제
print('deQueue -->', data) # 추출한 데이터 출력
front += 1
data = queue[front]
queue[front] = None
print('deQueue -->', data)
front += 1
data = queue[front]
queue[front] = None
print('deQueue -->', data)
print('----------------')
print("----큐 상태-----")
print('[출구] <---', end = ' ')
for i in range(0, len(queue), 1):
print(queue[i], end=' ')
print('<-- [입구]')
出力結果----큐 상태-----
[출구] <--- 화사 솔라 문별 None None <-- [입구]
----------------
deQueue --> 화사
deQueue --> 솔라
deQueue --> 문별
----------------
----큐 상태-----
[출구] <--- None None None None None <-- [입구]
Reference
この問題について(「データ構造」キューの基本概念と実装、スタック、比較(Python)), 我々は、より多くの情報をここで見つけました https://velog.io/@cha-suyeon/자료구조-큐Queue의-기본-개념-구조-간단-구현Pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol