キュークラスを定義する。
関数はenqueueとdequeueを持つ。
属性にqueuepointerと配列を持つ。
インスタンスを2つ生成。
それぞれ独立に生成されていることを確認できる。
[][][][]
enqueue 4
[4][][][]
enqueue 5
[4][5][][]
dequeue
[5][][][]
enqueue 3
[5][3][][]
max_len:5
head:0
tail:-1
[][][][][]
enqueue: 7
head:0
tail:0
[7][][][][]
enqueue: 5
head:0
tail:1
[7][5][][][]
enqueue: 3
head:0
tail:2
[7][5][3][][]
dequeue
> 7
[][5][3][][]
head:1
tail:2
enqueue :12
head:1
tail:3
[][5][3][12][]
enqueue :25
head:1
tail:4
[][5][3][12][25]
dequeue
head:2
tail:4
[][][3][12][15]
enqueue :8
head:2
tail:0
[8][][3][12][15]
# この時、プリントする順番は2, 3, 4, 0番目の順
enqueue :9
head:2
tail:1
[8][9][3][12][15]
dequeue
> 3
[8][9][][12][15]
head:3
tail:1
dequeue
> 12
[8][9][][][15]
head:4
tail:1
dequeue
> 15
[8][9][][][]
head:0
tail:1
dequeue
> 8
[][9][][][]
head:1
tail:1
class Queue:
max_len = 5 # データ長を最大で10
def __init__(self):
self.data_list = [None] * self.max_len
self.headpointer = 0
self.tailpointer = -1
def enqueue(self, x):
# 配列の次の位置の値がNoneでなければ、Queueは満杯である
if not self.data_list[(self.tailpointer+1)%self.max_len] is None:
print('Queue is full.')
return
# tailpointerを一つ進める
self.tailpointer = (self.tailpointer+1)%self.max_len
# 配列の、tailpointerの位置にデータを挿入
self.data_list[self.tailpointer] = x
def dequeue(self):
# 配列の、headpointerの値がNoneなら空である
if self.data_list[self.headpointer] is None:
print('Queue is empty.')
return
# 配列の、headpointerの位置のデータを出力
num = self.data_list[self.headpointer]
# 配列の、headpointerの位置をNoneで代入
self.data_list[self.headpointer] = None
# headpointerを一つ進める
self.headpointer = (self.headpointer+1)%self.max_len
# numを返す
return num
def output(self):
# data_listのheadpointerからtailpointerまでの出力
prtlist=[]
# headとtail、どちらの位置が大きいかによって、forの範囲を変更する。
if self.tailpointer < self.headpointer :
# 最大長から先頭位置を引き、末尾位置を加える
for_range = range(self.max_len-self.headpointer+self.tailpointer+1)
else:
# 末尾位置から先頭位置を引く
for_range = range(self.tailpointer-self.headpointer+1)
# headpointerからi番目のdatalistの値をprtlistに加える
for i in for_range:
prtlist.append(self.data_list[(i+self.headpointer)%self.max_len])
print(prtlist)
# クラス スタックのインスタンスを2つ生成
queue1 = Queue()
queue2 = Queue()
# Stackの操作
while True:
# 操作の対象を選択
tar = input("Input target.[queue1:1, queue2:2]:")
if tar == "1":
tar_queue = queue1
elif tar == "2":
tar_queue = queue2
else:
continue
# 操作の内容を選択
ope = input("Input operation.[enqueue:1, dequeue:2]:")
if ope == "1": # queueする
cont = input("Input enqueue data:")
tar_queue.enqueue(cont)
elif ope == "2": # dequeueする
ret_num = tar_queue.dequeue()
if ret_num is None:
# Noneならばスタックが空っぽ
print("Queue is empty.")
else:
print(ret_num)
else:
continue
# 操作の終了を尋ねる
is_continue = input("Continue?[y/n]")
if is_continue == "n":
break
print("queue1")
queue1.output()
print("queue2")
queue2.output()
"""
ホゲホゲピロピロ
"""
or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Do you want to remove this version name and description?
Syncing