C言語における構造体の基礎:宣言、自己参照、およびメモリ配置の仕組み

1. 構造体型の宣言と基本 構造体は、異なるデータ型の変数を一つの単位としてまとめることができる「値の集合」です。それぞれの構成要素はメンバ変数と呼ばれます。 1.1 構造体の宣言 構造体を定義する際の基本的な構文は以下の通りです。 struct 構造体タグ { メンバリスト; } 変数リスト; 例えば、社員情報を管理する構造体は次のように定義できます。 struct Emp ...

5月27日 02:32 投稿

プログラミングコンテスト問題集(7問)

L1-1 人と神 指定された文字列を直接出力するPHP実装 <?php echo "To iterate is human, to recurse divine."; ?> L1-2 C言語速習 基本数値計算処理の実装例 #include <iostream> using namespace std; void calculate() { int total, studied, hours; cin >> total >> studied >> hours; cout input; int century = input / 100; ...

5月25日 23:04 投稿

アルゴリズムとデータ構造 - 二分探索法の応用

二分探索法 基本概念 二分探索法は情報科学で広く応用されるアルゴリズムの一つです。その核心的なアイデアは各操作で半分の候補を除外することであり、これにより問題の解を \(\text{log}_2n\)(情報科学では通常 \(\text{log}n\) と表記)の操作回数で見つけることができます。 補足:アルゴリズムの計算量 コンピュータは十分速いかもしれないが、無限速ではない。——『 ...

5月25日 17:27 投稿

C言語における挿入ソートの仕組みと最適化実装

挿入ソートの基本概念 C言語における挿入ソート(Insertion Sort)は、小規模なデータや部分的に整列済みのデータに対して高い効率を発揮する整列アルゴリズムである。未整列の要素を順番に取り出し、既に整列済みの領域内で適切な挿入位置を後方から探索して挿入することで、全体の順序を構築していく仕組みを持つ。 標準的な挿入ソートの実装 以下に、挿入ソートの基本 ...

5月25日 04:03 投稿

Codeforces 920 (div3) 解法まとめ

問題 A - Codeforces 入力された四つの座標から、正方形の面積を求める問題です。各辺が軸に平行な正方形かどうかを判定し、辺の長さを計算して面積を求めます。 #include <bits/stdc++.h> using namespace std; typedef long long LL; int main() { int cases; cin >> cases; while(cases--) { int x1, y1, x2, y2, x3, y3, x4, y4; ...

5月25日 02:21 投稿

接尾辞配列とその応用

接尾辞配列 単一文字列の部分文字列に関する辞書順問題に一般的に利用できます。 アルゴリズムの流れ まず、文字列のすべての接尾辞をソートします。 定義:\(sa[i]\) はすべての接尾辞をソートした後、第 \(i\) 番目に小さい接尾辞のインデックスを表します。\(rk[i]\) は接尾辞 \(i\) のランクを表します。 倍増法と基数ソート(\(O(n\log n)\))を採用します(簡略化/エ ...

5月23日 21:50 投稿

LinkedList ソースコード解析

内部構造と特徴 LinkedList は内部的にダブルリンクリスト(双方向リスト)によって実装されており、List インターフェースと Deque インターフェースの両方を実装しています。このため、LinkedList はリストとして扱うことができるだけでなく、キュー(Queue)やスタック(Stack)としても利用可能です。 ただし、スタックやキューとして使用する場合には ArrayDeque の使 ...

5月23日 21:39 投稿

データ構造の基礎:配列、リンクリスト、スタック、キューの実装

配列(シーケンシャルリスト) 配列は連続したメモリ領域にデータを格納するデータ構造です。C言語環境では、名前付きのスタック配列または匿名のヒープ配列として実装できます。 配列の設計 配列を操作しやすくするために、専用の「管理構造体」が必要です。この構造体には通常以下の要素が含まれます: 配列の総容量 現在の最後の要素のインデックス位置 配列へのポイ ...

5月23日 18:40 投稿

Pythonのデータ構造とアルゴリズム - 4 リストのソート - 2 ホームソート、ヒープソート、マージソート

以下は、クイックソートの実装コードです。 # 左側の要素がすでに処理された場合、右側から探してtempより小さい値をleftに配置します。 while right > left: # rightとleftの間に要素がある限りループを続けます while lis[right] >= temp and right > left: # rightの値がtemp以上なら、その値はそのままにしてrightを左へ移動 right -= 1 li ...

5月23日 18:03 投稿

Guava Tableを用いた多次元データ構造の実装

多次元データ管理の基本概念 標準的な二次元テーブルは行と列の交差点で値を管理しますが、現実のデータモデルでは三つ以上の次元(例:時間・地域・製品カテゴリ)が必要となるケースが頻繁に発生します。GuavaのTableクラスはネイティブで多次元をサポートしませんが、適切なネスト構造を用いることでこの制限を克服できます。 Tableのネストによる三次元構造 Tableイン ...

5月23日 00:18 投稿