宿舎管理システムの設計と実装(C言語によるデータ構造の応用)

概要 本稿では、データ構造とアルゴリズムに関する課題として開発した「宿舎管理照会ソフトウェア」について紹介する。学生の宿舎情報を効率的に管理・検索・操作することを目的とし、C言語で実装された単方向連結リストを基盤としたシステムである。主な機能には、学生情報の追加・削除・検索・ソート・表示が含まれる。ユーザーインターフェースはテキストベースのメニュ ...

5月30日 11:45 投稿

リンクリストの概要

単一リンクリストノードの定義 LeetCodeでの単一リンクリストノードの定義は以下の通りです: package com.wang.base.linkedList; public class Demo01 { class ListNode{ int val; ListNode next; ListNode(int x){ val=x; } } } しかし、実際のプログラミング言語では、より複雑な構造が使われます: package co ...

5月30日 03:32 投稿

競技プログラミング問題集 SMU Spring 2023

A. 重複要素の削除 与えられた数列から重複要素を削除し、最初に出現した要素のみを保持するアルゴリズム。 #include <iostream> #include <vector> #include <unordered_map> using namespace std; vector<int> removeDuplicates(const vector<int>& nums) { unordered_map<int, int> countMap; vector<int> result ...

5月29日 14:24 投稿

C言語における単方向連結リストの仕組みと実装方法

連結リストの基本概念とノード定義配列などのシーケンシャルなデータ構造では、要素の挿入や削除に伴うデータの移動コストが高くなる。この問題を解決するため、各要素をポインタで連結する連鎖構造(単方向連結リスト)が用いられる。単方向連結リストには以下の特徴がある。論理的に隣接する要素が物理的なメモリ上でも隣接している必要がない。ランダムアクセスが不可能 ...

5月29日 08:29 投稿

二分木問題の解法と実装

二分木の基礎理論 二分木は各ノードの子ノード数が最大2の木構造です。主要な形態として完全二分木と完全二分木が存在します。データ格納方式には配列を用いた順序格納とポインタを用いたリンク方式があります。走査方法は以下の通りです: 先行走査(深さ優先) 中間走査(深さ優先) 後行走査(深さ優先) 階層走査(幅優先) class BinaryNode: def __init__(self ...

5月28日 10:53 投稿

重量値セグメント木と動的ノード作成

目次- ブルートフォース法 (1) ブルートフォース法 (2) 重量値セグメント木 演習問題 はじめに主席木を学習中に、重量値セグメント木の学習ノートを更新しておくのを思い出しました まず、以下の問題を考えてみましょう: 配列に対して以下の操作を行います: 操作 (1):配列中の第k小さい要素を問い合せます(答えは存在すると仮定)。 操作 (2):ある要素を変更しま ...

5月28日 02:10 投稿

バブル、挿入、クイック、マージソートの比較

バブルソート 隣接要素を比較して交換するアルゴリズム。最大値を末尾に移動させる処理を繰り返す。 public class BubbleSort { public static void executeSort(int[] array) { int length = array.length; for (int i = 0; i < length - 1; i++) { for (int j = 0; j < length - 1 - i; j++) { if (array[j] > array[j ...

5月27日 19:15 投稿

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 投稿