順序リストの実装
空間計算量
一般的な再帰は深さ優先探索であり、深さ優先探索の空間計算量は再帰の深さによって決まります。ある方向での再帰が終了すると、その時点で使用していたスタック領域が解放され、同じメモリが再利用されます。
順序リスト
静的順序リスト
typedef int SLDataType;
#define N 10
struct SeqList {
SLDataType a[N];
int size;
};
動的順序リスト
seq ...
7月30日 01:26 投稿
第5回藍橋杯 C++ B級プログラミングコンテスト問題解説
1. ビールと飲料の購入
解法: 全探索(ブルートフォース)
ビール(1缶2.3元)と飲料(1缶1.9元)の合計金額が82.3元。ビールの本数が飲料より少ない条件で計算します。浮動小数点計算の誤差を避けるため、10倍して整数で処理します。
#include <iostream>
using namespace std;
int main() {
for (int beer = 0; beer <= 823 / 23; ++beer) {
for ( ...
7月29日 17:12 投稿
C言語初学者向けの実践プログラムと核心概念の解説
基本入出力と制御構造
初期学習段階では、標準入出力と基本的な制御フローをマスターすることが重要です。
#include <stdio.h>
int main() {
// 飛行機のASCIIアート
printf(" ** \n");
printf(" ** \n");
printf("************\n");
printf("************\n");
printf(" * * \n");
printf(" * * \n");
...
7月25日 17:40 投稿
プログラミング実験レポート
1. 点数評価システム
#include <stdio.h>
char calculateGrade(int score);
int main() {
int score;
char result;
while (printf("点数を入力してください: "), scanf("%d", &score) != EOF) {
result = calculateGrade(score);
printf("Score: %d, Grade: %c\n\n", score, result);
}
return 0;
}
char calculateGrade( ...
7月19日 17:22 投稿
リスト操作の基礎: 要素の削除、リストの設計、およびリストの逆転
リスト理論の基礎
リストノードの定義
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
203. リストから要素を削除する
class Solution:
def removeElements(self, head, val):
dummy_head = ListNode(next=head)
current = dummy_head
while current.next is not None:
...
7月16日 21:47 投稿
SMU 2024年秋期 第1回個人戦 解説
A. 辞書順最小文字列生成
解法概要
2つの文字列を降順にソートし、交互に文字を取り出す。同じ文字列から連続して取り出す回数が制限値kを超えないようにしながら、最終的に辞書順が最小になるように構築する。
変更版コード例
#include <iostream>
#include <algorithm>
using namespace std;
void process() {
int lenA, lenB, maxSame;
cin >> le ...
7月12日 19:03 投稿
C言語で学ぶ二分木の基礎と応用
二分木の基本的な操作
二分木は、各ノードが最大2つの子ノードを持つ木構造です。この記事では、C言語を用いて二分木の作成、走査、特性の計算、および部分木の交換といった基本的な操作を実装する方法を学びます。
ノードの定義
二分木の各ノードは、データと左右の子ノードへのポインタを持ちます。以下にその構造体を示します。
struct Node {
char data;
str ...
7月11日 20:42 投稿
C言語プログラミング演習:関数とアルゴリズム
演習課題1:成績評価システム
#include <stdio.h>
char evaluate_score(int mark); // 関数宣言
int main() {
int mark;
char evaluation;
while(scanf("%d", &mark) != EOF) {
evaluation = evaluate_score(mark); // 関数呼び出し
printf("得点: %d, 評価: %c\n\n", mark, evaluation);
}
...
7月3日 21:29 投稿
バックトラッキングアルゴリズムとその応用問題
組合せ問題(Leetcode77)
// アプローチ: 1からnまでの数を再帰的に探索し、リストでk個の組み合わせが作成されたかを記録
// 各ループの開始値が前の値と重複しないように、開始インデックスを設定
class Solution {
private List<List<Integer>> 結果;
private List<Integer> 現在の組み合わせ;
private int 目標サイズ;
public ...
7月2日 17:53 投稿
二分探索法と再帰を用いたデータ構造の問題解決
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 投稿