teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

逆にすればいいか

2018/10/30 14:44

投稿

yumetodo
yumetodo

スコア5852

answer CHANGED
@@ -1,11 +1,17 @@
1
1
  リストって双方向リストじゃなくて単方向リストなのね。
2
2
 
3
- stackの実現には
3
+ stackの実現には通常
4
4
 
5
5
  - 末尾への追加
6
6
  - 末尾の削除
7
7
  - 末尾の取得
8
8
 
9
- が必要です。さて、単方向リストだと、任意の要素へのアクセスには`O(n)`のコストが掛かってしまいます。言い換えるとstack操作をなにかしようとするたびに要素数Nに比例するコストが掛かるということです。
9
+ が必要です。、単方向リストだと、任意の要素へのアクセスには`O(n)`のコストが掛かってしまいます。言い換えるとstack操作をなにかしようとするたびに要素数Nに比例するコストが掛かるということです。
10
10
 
11
+ なので発想を切り替えて
12
+
13
+ - 先頭要素の前に追加(stackに積む操作)
14
+ - 先頭要素の削除(stackを取る操作)
15
+ - 先頭要素の取得(stackを取る操作)
16
+
11
- 結論としては極めて馬鹿げているの、双方向リストでやるか、そもそもメモリーの局所性的にリスト構造は美味しくないので単に動的配列で装するべきでしょう。
17
+ で実現させましょう。これなら`O(1)`です。