PHPで実装するキューとスタック:配列と連結リストによるデータ構造の基礎

キュー(Queue)の基本概念 キューは先入先出(FIFO: First In, First Out)の原則に従う線形データ構造です。データの追加(エンキュー)は末尾でのみ行われ、データの削除(デキュー)は先頭でのみ行われます。PHPの組み込み関数を使用する場合、array_push() または配列の代入で末尾に要素を追加し、array_shift() で先頭の要素を削除することでキューの動作を再現でき ...

9月14日 11:19 投稿

11月15日のアルゴリズム問題集追加

11/15 問題1: 二進数行列の最小反転回数 (3239) 解法はシミュレーションに基づく。 各行の反転回数を計算し、列方向の反転回数も同様に求めます。 int calcRowDiff(const vector& matrix) { int count = 0; for (const auto& row : matrix) { for (size_t i = 0; i < row.size() / 2; ++i) { if (row[i] != row[row.size()-1-i]) ++count; ...

9月9日 19:42 投稿

基本的なアルゴリズム:離散化

離散化 #include <bits/stdc++.h> using namespace std; const int MAX_N = 1000010; int n, m; vector<int> originalValues; vector<int> addedValues; vector<int> startPos, endPos; vector<long long> diffArray; bool canProcess(int limit) { fill(diffArray.begin(), diffArray.end(), 0); for (int i = 0; i < li ...

8月29日 17:04 投稿

配列によるスタックのC++実装 —— 作成・プッシュ・ポップ・トップ・クリア処理

本日は配列を用いたスタックのC++実装について学習しました。これはポインタ方式と多くの点で異なります。 ポインタ方式では、スタックの初期化時にヘッドノードを確保し、プッシュ操作では新しいノードを割り当て、ポップ操作ではノードを解放します。これらのノードはすべて最初の位置に配置され、トップ要素を取得する際にはS->next->dataを参照します。 一方で配 ...

8月29日 02:20 投稿

単方向連結リストの基礎とJavaによる実装

連結リストとは 連結リストは、配列とは異なり連続したメモリ領域を必要としないデータ構造です。各ノードが次のノードへの参照(ポインタ)を持つことで、離散的なメモリブロックを連結します。 この特性により、要素の検索は先頭から順次走査する必要がありますが、挿入や削除は参照の付け替えだけで完結します。その結果、配列と比較して検索のコストが高く、挿入・削 ...

8月26日 21:39 投稿

キー・バリューストアとハッシュテーブルの実装

マップ(連想配列)では、キーと値のペアでデータを管理する。キーを一意に識別するために、文字列変換関数を用いることが多い。以下は、シンプルな辞書(Dictionary)クラスの実装例である。 // オブジェクトのキーを文字列に変換する補助関数 function keyToString(item) { if (item === null) return "NULL"; if (item === undefined) return "UNDEFINED"; if (t ...

8月20日 01:58 投稿

Javaにおける配列の基本操作とメモリ管理

配列の概念と特性 配列(Array)は、同一データ型の複数の値を格納するためのコンテナです。データ格納時には暗黙的な型変換を考慮する必要があります。 配列の宣言方法 形式1:データ型[] 配列名 int[] numbers; 形式2:データ型 配列名[] int numbers[]; 静的初期化 int[] numbers = new int[]{10, 20, 30, 40}; // 簡略化形式 int[] values = {15, 25, 35, 45}; 動的 ...

8月17日 11:15 投稿

Pythonの集合操作と重複排除テクニック

集合の基本操作 Pythonの集合は数学的な集合演算をサポートしています。以下は主要な集合操作の例です。 集合演算の実例 set_a = {'食事', '睡眠'} set_b = {'食事', '睡眠', '旅行', 'ゲーム', '読書', '運動'} # 共通部分(積集合) intersection = set_a & set_b print(f"共通要素: {intersection}") # 和集合 union = set_a | set_b print(f"全要素: {union}") # ...

8月11日 23:19 投稿

Javaアルゴリズム実践:コレクション操作とデータ構造

コレクション操作ユーティリティ ArraysとCollectionsクラスの主要メソッド: asList:リスト変換には戻り値が必要 copyOfRange:配列の部分コピー 型変換テクニック // List<Integer> → int[] public int[] convert(List<Integer> list) { return list.stream() .mapToInt(Integer::intValue) .toArray(); } Stream ...

8月10日 13:21 投稿

Javaアルゴリズム問題解法集

1. 文字頻度解析 問題概要 小文字英字のみで構成される単語が与えられます。最も頻繁に出現する文字とその回数を求めてください。複数の文字が同じ回数出現する場合は、辞書順で最小の文字を出力します。 実装例 import java.util.Scanner; public class CharacterFrequency { public static void main(String[] args) { Scanner input = new Scanner(Syste ...

8月9日 12:52 投稿