C言語で学ぶ二分木の基礎と応用
二分木の基本的な操作
二分木は、各ノードが最大2つの子ノードを持つ木構造です。この記事では、C言語を用いて二分木の作成、走査、特性の計算、および部分木の交換といった基本的な操作を実装する方法を学びます。
ノードの定義
二分木の各ノードは、データと左右の子ノードへのポインタを持ちます。以下にその構造体を示します。
struct Node {
char data;
str ...
7月11日 20:42 投稿
データ構造の基礎実装
データ構造入門
データ構造は効率的なアルゴリズム設計の基盤となる概念です。プログラミングにおける問題解決能力は反復練習によって向上します。
基本概念
データ構造は情報の論理的関係と記憶領域内での配置方法を扱います。主な構成要素:
データ:計算機で処理可能な情報の表現
データ要素:データの基本単位(レコード)
データ構造の三側面
データ操作: ...
7月10日 19:49 投稿
スタックとキューを用いたデータ構造の実装と文字列処理
スタックによるキューの実装
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 投稿