リンクリストの基本操作:要素削除・設計・反転をC言語で徹底解説

1. 問題203:リンクリストの特定要素削除 // ヘッダノードを使用しない実装(移動操作で削除) struct ListNode* removeElements(struct ListNode* head, int val) { // 先頭ノードが削除対象の場合 while (head != NULL && head->val == val) { head = head->next; } // 先頭以外のノードを削除 struct ListNode* current = head; while ...

8月9日 12:37 投稿

C言語における高度なポインタ活用術:ポインタ配列、関数ポインタ、関数ポインタ配列、コールバック関数の実践

ポインタ配列とは 通常の配列が整数や文字などのデータをまとめて格納するのに対し、ポインタ配列はメモリアドレスを要素として保持する特殊な配列です。各要素が別の変数や配列の先頭アドレスを指し示すことで、間接的に複数のデータ群を管理できます。 例えば、複数の文字列を効率的に扱う場合、ポインタ配列は非常に有効です。各文字列の先頭アドレスを配列に格納するこ ...

8月8日 16:35 投稿

ファイル内文字列検索におけるKMPアルゴリズムの実装

KMPアルゴリズムによるパターン検索 本記事では、KMP(Knuth-Morris-Pratt)アルゴリズムを用いたファイル内文字列検索の実装について説明します。この実装はfindstrコマンドのような機能を提供し、ディレクトリの再帰的な走査やパターンマッチングを含みます。 ヘッダーファイル (findstr.h) #ifndef _FIND_STR_H_ #define _FIND_STR_H_ #ifdef __cplusplus extern "C" ...

8月8日 09:59 投稿

C言語におけるその他の文字列操作関数の解説

strstr関数 strstr関数は、ある文字列内に別の文字列が含まれるかどうかを判定し、その位置を返すために使用されます。 関数名 機能 ヘッダ strstr 文字列str1内でstr2を検索 #include <string.h> 戻り値は、str2がstr1内で最初に現れる位置を指すポインタです。見つからない場合はNULLを返します。 カスタム実装例 #include ...

8月8日 03:06 投稿

組み込みシステムにおけるC言語のアルゴリズム入門

1. 配列の並び替えアルゴリズム 1.1 選択ソート —— 最小値を特定の位置に配置する 各ステップで未ソート部分から最小値(または最大値)を選び、それを対応する位置と交換することで、全体がソートされるまで処理を繰り返す。昇順での例を示す: #include <stdio.h> int main() { int data[] = {4, 8, 7, 6, 2, 5, 3, 9, 1}; int length = sizeof(data) / s ...

8月6日 20:57 投稿

Rustのunsafeコード:unsafe関数、トレイト、外部関数インターフェース(FFI)

本稿では、unsafeコード、特にunsafe関数とunsafeトレイト、そして外部関数インターフェース(FFI)について解説する。まずunsafeブロックの基本を確認し、その後具体例を通じて理解を深める。 unsafeブロックの基本 unsafeブロックは以下のように記述する: unsafe { // 安全でない操作 } 関数内や式の中でunsafeブロックを使用できる。例: println!("r1: {}, r2: { ...

8月6日 16:25 投稿

C言語における条件分岐の実装

C言語は、順次構造、分岐構造、繰り返し構造という3つの主要な構造を持つ構造化言語です 本稿で解説する「条件分岐」は、分岐構造に対応します。 C言語では、非ゼロか非NULLの値を真(true)とし、ゼロまたはNULLを偽(false)として扱います。 if文 if(ブール式){ // ブール式が真の場合に実行される文 } int age = 20; if(age >= 18){ printf("成人です"); } ...

8月6日 10:22 投稿

C言語ポインタ実践ガイド:型、const、演算、安全性を完全理解

ポインタの型が示す意味 アドレスを格納する変数は全て「ポインタ」と呼ばれますが、なぜ int* や char* など型を区別するのでしょうか。型の違いが与える影響を実験で確かめます。 型によるメモリアクセス幅の違い 次の2パターンで4バイト整数を書き換えた場合の挙動を比較してください。 int main(void) { unsigned value = 0xAABBCCDD; int *pi = &value; ...

8月5日 23:07 投稿

Nginxログ形式コンパイラの実装詳細

src\http\modules\ngx_http_log_module.c static char * ngx_http_log_compile_format(ngx_conf_t *cf, ngx_array_t *flushes, ngx_array_t *ops, ngx_array_t *args, ngx_uint_t s) { u_char *data, *p, ch; size_t i, len; ngx_str_t *value, var; ngx_int_t *flush; ngx_uint_t brac ...

8月4日 12:02 投稿

C言語でXOR演算子を使って、古き良きXORリストを実装する方法

XORリストの基本概念 XORリストは、各ノードが前後のノードのアドレスをXOR演算子を使って1つのポインタフィールドに格納する特別な連結リストです。これにより、通常の双方向リストで必要な2つのポインタ(前と次)の代わりに、1つのポインタフィールドで済むため、メモリ使用量を削減できます。 この手法の鍵となるのは、XOR演算子の性質です。AとBがポインタ(アドレス ...

8月4日 11:12 投稿