スタックとキューを用いたデータ構造の実装と文字列処理

スタックによるキューの実装 2つのスタックを使用してキューの操作を実現します。入力用スタックと出力用スタックを用意し、要素の追加と取り出しを効率的に行います。 class QueueWithStacks { private: std::stack<int> inputStack; std::stack<int> outputStack; public: void enqueue(int value) { inputStack.push(value); ...

7月4日 22:11 投稿

中缀表达式から後置記法への変換アルゴリズムと括弧の整合性検証

中置記法から後置記法への変換 数式をプログラムで評価する際、中置記法(infix notation)を後置記法(postfix notation、逆ポーランド記法)に変換することが一般的である。この変換はスタックを用いたアルゴリズムにより実現され、以下の特徴を持つ: 入力式の括弧が正しく対応している必要がある。 演算子の優先順位に基づいて変換が行われる。 出力される後置 ...

6月30日 22:54 投稿

二分探索法と再帰を用いたデータ構造の問題解決

1. 二次元配列内の要素検索 二次元配列(各一次元配列の長さが同じ)で、各行が左から右に昇順に、各列が上から下に昇順にソートされている場合、与えられた整数が配列内に存在するかを判断する関数を作成します。 public class Solution { public boolean find(int target, int[][] array) { for (int i = 0; i < array.length; i++) { for (in ...

6月29日 23:37 投稿

new演算子、継承、スタックとヒープ、シリアライズコピーとシャローコピー

new演算子の内部仕組み new演算子はオブジェクトをインスタンス化し、新しいオブジェクトを返します。コンストラクタ関数内のthisはインスタンスに参照されます。 new演算子の内部プロトタイプ var p1 = {} で新規オブジェクトを作成し、メモリ空間を確保します。 Person.call(p1) を使用して、Person関数内のthisをp1に変更します。 p1.__proto__ == Person.prototype ...

6月26日 17:55 投稿

二分木の中順走査:再帰と反復による実装

二分木の根ノード root が与えられたとき、中順走査(In-order Traversal)の結果を返す。 中順走査の順序は:左部分木 → 根ノード → 右部分木 二分木ノードの定義 public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { ...

6月21日 18:13 投稿

データ構造アルゴリズム学習ノート

データ構造 単方向連結リストの操作 // 初期化 void initialize() { top = -1; // リストの先頭を-1に設定 counter = 0; // 使用中のインデックスカウンター } // 先頭に要素を挿入 void insert_at_top(int value) { elements[counter] = value; // 値をカレントノードに格納 next_pointers[counter] = top; // カレントノードの次を現在の先頭に ...

6月16日 18:20 投稿

データ構造:線形リスト

問題3156 【基礎15.例題1】生徒番号の照会 問題概要 最大2×106人の生徒が教室に入っており、それぞれの生徒番号(1〜109の範囲)が教室に入った順序で与えられる。その後、最大105回にわたって、何番目に教室に入ったかを尋ねる質問が行われる。各質問に対する答えを出力する必要がある。 入力形式 n m s1 s2 ... sn q1 q2 ... qm nは生徒数、mは質問の回数を表す。siはi番 ...

6月8日 22:54 投稿

スタックを用いた中置・後置数式の評価

中置表現の評価(括弧付き) 中置表現を直接評価するには、演算子の優先順位と括弧の処理を正しく扱う必要がある。以下の実装では、2つのスタック(数値用と演算子用)を用いて、入力文字列を1パスで処理する。 #include <bits/stdc++.h> using namespace std; stack<int> nums; stack<char> ops; unordered_map<char, int> precedence = {{'+', ...

6月6日 21:06 投稿

最長有効括弧の探索:スタックと動的計画法によるアプローチ

問題の説明: '(' と ')' のみからなる文字列が与えられます。最長の有効な(形式が正しく連続している)括弧部分文字列の長さを見つけてください。 例 1: 入力:s = "(()" 出力:2 説明:最長の有効な括弧部分文字列は "()" です 例 2: 入力:s = ")()())" 出力:4 説明:最長の有効な括弧部分文字列は "()()" です 例 3: 入 ...

6月4日 17:25 投稿

深さ優先探索(DFS)の実装と応用

基本原理: 深さ優先探索は、開始ノードから出発し、一つの分岐を深く進み続けます。葉ノードまたは進めなくなったノードに到達するまで探索を続けます。 探索が葉ノードまたは進めなくなったノードに到達した場合、未探索の前のノードに戻り、他の分岐の探索を続けます。 既に訪問したノードをマークすることで、同じ経路での重複訪問を避けます。 DFSアルゴリズムのス ...

5月31日 11:33 投稿