「DA:stackqueue」の版間の差分

提供:classwiki
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の8版が非表示)
49行目: 49行目:


  def isEmpty():
  def isEmpty():
     if head + 1 == tail:
     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])
    else:
        print(queue[head:] + queue[:tail])
   
   
  # テストコード
  # テストコード
95行目: 95行目:
   
   
  for i in range(5): pop()
  for i in range(5): pop()
show()


= キーボード入力を受け取って最後の5行を表示させるプログラム =
= キーボード入力を受け取って最後の5行を表示させるプログラム =


配列名はqueueのままですが,これはリングバッファです.リングバッファを操作する関数(push, pop, isEmpty, show)は省略しています.whileループの中の処理が未完成なので,完成させてください.
キーボード入力を受け取って最後の5行を表示させるプログラムです.プログラムを実行すると,入力待ちになるので,「任意の文字列を入力してEnterを押す」を何度か繰り返します.最後に"end"と入力してEnterを押すと,breakしてwhileループを抜けて,最後の5行の内容を表示する,と言うプログラムです.なお,入力された文字列が(最後の"end"を除いて)5行に満たない場合には,足りない行の分だけ,代わりに"0"を表示するようになっています.(あまりスマートではありませんが,プログラムの簡潔さを優先しました.)


  queue = [0 for i in range(5)] #最後の5行を表示させたい.
プログラム中で使われている配列名はqueueのままですが,これはリングバッファです.リングバッファを操作する関数(push, pop, isEmpty, show)は省略しています.
 
whileループの中の処理が未完成なので,完成させてください.
 
  queue = [0 for i in range(10)]
  head = 0
  head = 0
  tail = 0
  tail = 5 #最後の5行を表示させたい
   
   
  while True:
  while True:
114行目: 119行目:
= 括弧列の整合性をチェックするプログラム =
= 括弧列の整合性をチェックするプログラム =


スタックを用いて実装します.
スタックを用いて実装します.flag の初期値を True にしておき,括弧列が不整合であることを発見した場合に flag = False として,最後に flag の値に基づいて結果を出力します.「括弧列が不整合である」とはどのような状況か,を考えて,以下のプログラムを完成させてください.


  q = '(()(())())(()())'
  q = '(()(())())(()())'

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('括弧列は整合していません!')