「DA:stackqueue」の版間の差分
ナビゲーションに移動
検索に移動
(→キュー) |
|||
| (同じ利用者による、間の10版が非表示) | |||
| 49行目: | 49行目: | ||
def isEmpty(): | def isEmpty(): | ||
if head | if head == tail: | ||
print('キューは空です!') | print('キューは空です!') | ||
return True | return True | ||
| 70行目: | 70行目: | ||
def show(): | def show(): | ||
if isEmpty(): | |||
return | |||
if head < tail: | if head < tail: | ||
print(queue[head:tail]) | print(queue[head:tail]) | ||
# テストコード | # テストコード | ||
| 95行目: | 95行目: | ||
for i in range(5): pop() | for i in range(5): pop() | ||
show() | |||
= キーボード入力を受け取って最後の5行を表示させるプログラム = | = キーボード入力を受け取って最後の5行を表示させるプログラム = | ||
キーボード入力を受け取って最後の5行を表示させるプログラムです.プログラムを実行すると,入力待ちになるので,「任意の文字列を入力してEnterを押す」を何度か繰り返します.最後に"end"と入力してEnterを押すと,breakしてwhileループを抜けて,最後の5行の内容を表示する,と言うプログラムです.なお,入力された文字列が(最後の"end"を除いて)5行に満たない場合には,足りない行の分だけ,代わりに"0"を表示するようになっています.(あまりスマートではありませんが,プログラムの簡潔さを優先しました.) | |||
プログラム中で使われている配列名はqueueのままですが,これはリングバッファです.リングバッファを操作する関数(push, pop, isEmpty, show)は省略しています. | |||
whileループの中の処理が未完成なので,完成させてください. | |||
queue = [0 for i in range( | queue = [0 for i in range(10)] | ||
head = 0 | head = 0 | ||
tail = | tail = 5 #最後の5行を表示させたい | ||
while True: | while True: | ||
| 114行目: | 119行目: | ||
= 括弧列の整合性をチェックするプログラム = | = 括弧列の整合性をチェックするプログラム = | ||
スタックを用いて実装します.flag の初期値を True にしておき,括弧列が不整合であることを発見した場合に flag = False として,最後に flag の値に基づいて結果を出力します.「括弧列が不整合である」とはどのような状況か,を考えて,以下のプログラムを完成させてください. | |||
q = '(()(())())(()())' | q = '(()(())())(()())' | ||
| 126行目: | 131行目: | ||
for i in range(len(q)): | for i in range(len(q)): | ||
if q[i] == '(': | if q[i] == '(': | ||
push( | push(0) | ||
else: | else: | ||
if | if ###埋めてください###: | ||
flag = False | flag = False | ||
a = pop() | a = pop() | ||
if | if ###埋めてください###: | ||
flag = False | flag = False | ||
2025年4月16日 (水) 01:57時点における最新版
スタック
def isEmpty():
if cur == 0:
print('スタックは空です!')
return True
return False
def push(x):
global cur
if cur == len(stack):
print('これ以上要素を追加できません!')
return
stack[cur] = x
cur += 1
def pop():
global cur
if isEmpty():
return
cur -= 1
return stack[cur]
def show():
print(stack[:cur])
# テストコード
stack = [0 for i in range(10)]
cur = 0
push(1)
push(1)
push(2)
push(3)
push(5)
push(8)
push(13)
push(21)
show()
for i in range(5): pop()
show()
for i in range(5): pop()
キュー
def isEmpty():
if head == tail:
print('キューは空です!')
return True
return False
def push(x):
global tail
if tail == len(queue):
print('これ以上要素を追加できません!')
return
queue[tail] = x
tail += 1
def pop():
global head
if isEmpty():
return
head += 1
return queue[head-1]
def show():
if isEmpty():
return
if head < tail:
print(queue[head:tail])
# テストコード
queue = [0 for i in range(10)]
head = 0
tail = 0
push(1)
push(1)
push(2)
push(3)
push(5)
push(8)
push(13)
push(21)
show()
for i in range(5): pop()
show()
for i in range(5): pop()
show()
キーボード入力を受け取って最後の5行を表示させるプログラム
キーボード入力を受け取って最後の5行を表示させるプログラムです.プログラムを実行すると,入力待ちになるので,「任意の文字列を入力してEnterを押す」を何度か繰り返します.最後に"end"と入力してEnterを押すと,breakしてwhileループを抜けて,最後の5行の内容を表示する,と言うプログラムです.なお,入力された文字列が(最後の"end"を除いて)5行に満たない場合には,足りない行の分だけ,代わりに"0"を表示するようになっています.(あまりスマートではありませんが,プログラムの簡潔さを優先しました.)
プログラム中で使われている配列名はqueueのままですが,これはリングバッファです.リングバッファを操作する関数(push, pop, isEmpty, show)は省略しています.
whileループの中の処理が未完成なので,完成させてください.
queue = [0 for i in range(10)]
head = 0
tail = 5 #最後の5行を表示させたい
while True:
x = input()
if x == 'end':
break
#### 完成させましょう ####
show()
括弧列の整合性をチェックするプログラム
スタックを用いて実装します.flag の初期値を True にしておき,括弧列が不整合であることを発見した場合に flag = False として,最後に flag の値に基づいて結果を出力します.「括弧列が不整合である」とはどのような状況か,を考えて,以下のプログラムを完成させてください.
q = '(()(())())(()())'
# q = '())'
# q = '((())'
stack = [0 for i in range(100)]
cur = 0
flag = True
for i in range(len(q)):
if q[i] == '(':
push(0)
else:
if ###埋めてください###:
flag = False
a = pop()
if ###埋めてください###:
flag = False
# 括弧列が整合しているか判定
if flag:
print('括弧列は整合しています.')
else:
print('括弧列は整合していません!')