【解説】スタックとは?練習問題で後入れ先出しのメリットを紹介

20231022_IT_stack テクノロジー辞典

基本情報技術者試験の練習をしていると「スタック」という言葉が出てきました.

日常会話や実務ではあまり使わない言葉ですが,実は使い所も多い重要なデータ構造です.

今回はスタックの意味と実用例について紹介します.
また基本情報の回答も一緒に載せたので試験の参考にしてみてください.

スタックとは?

スタック(stack)とは英語で「積み重ね」という意味があります.

IT分野ではスタックというデータ構造があります.
英語の意味が転じ,後に入れたデータを先に取り出すデータ構造(後入れ先出し)をスタックと言います.

スタックの基本操作と用語

スタックには主に2つの操作方法があります.

  1. プッシュ(Push):データをスタックに追加する操作
  2. ポップ(Pop):データをスタックから取り出す操作

スタックは配列のような箱にデータを詰めて取り出すことだと考えると良いでしょう.
ただし取り出すときは必ず後に入れたデータから取り出さなければなりません.

クリックして拡大できます|図1

サンプルコード

スタックをPythonで書いてみます.

初めにトレーニングリストを用意します.
トレーニングリストにトレーニングメニュー(「腕立て」,「腹筋」)をプッシュします.
(Pythonではプッシュするのにappendメソッドを使う)

トレーニングリストからポップしデータを取り出しましょう.
このとき後から入れたトレーニングメニューから順に取り出されるか確認します.

クリックして拡大できます

「腕立て」「腹筋」の順にリストへ入れましたが,ポップすると「腹筋」「腕立て」の順で表示されました.

後入れ先出しでデータを取り出せていますね.

training_list = [] # リストを用意する
training_list.append('腕立て')
training_list.append('腹筋')

print(training_list) # ['腕立て', '腹筋']

print(training_list.pop()) # 腹筋
print(training_list.pop()) # 腕立て

基本情報 令和元年秋問8を解く

スタックに関する問題をPythonを使って解いてみます.

A,C,K,S,Tの順に文字が入力される。スタックを利用して,S,T,A,C,Kという順に文字を出力するために,最小限必要となるスタックは何個か。ここで,どのスタックにおいてもポップ操作が実行されたときには必ず文字を出力する。また,スタック間の文字の移動は行わない。

令和元年秋期 問8|基本情報技術者試験
クリックして拡大できます

スタックを3つ用意すると並び替えられました.

スタックが1つや2つだと初めに入力されるAをタイミング良く使えません.
そのためスタックが最低でも3つ必要になると分かります.

stack_list = [] # ポップしたデータを入れるリスト

# 用意するスタック
stack_1 = []
stack_2 = []
stack_3 = []

stack_1.append('A')
stack_2.append('C')
stack_3.append('K')
stack_3.append('S')
stack_list.append(stack_3.pop()) # ['S']
stack_3.append('T')
stack_list.append(stack_3.pop()) # ['S'. 'T']
stack_list.append(stack_1.pop()) # ['S', 'T', 'A']
stack_list.append(stack_2.pop()) # ['S', 'T', 'A', 'C']
stack_list.append(stack_3.pop()) # ['S', 'T', 'A', 'C', 'K']

print(stack_list) # ['S', 'T', 'A', 'C', 'K']

まとめ

今回はスタックの意味とその使い方を紹介しました.

スタックは後に入れたデータを先に取り出す後入れ先出しのデータ構造を言いました.

基本情報の問題を解いたようにデータを一時保存するときに便利ですね!

データ構造の種類は試験でもよく出題されます.
これを機会に覚えておきましょう!