答えて
はいあります。list.hです。また、循環リンクリスト:
次のリンクには、それを使用する方法のexampleが含まれています。
list.h
は、定義のような円形のリンクリストの管理に関連するすべての機能が含まれ、頭に追加し、尾に追加、削除、循環リンクリストを閲覧するforeachの機能...
これはLinuxカーネル固有の回答ですが、 "in C"の一般的な回答ではありません。私はそれが投票されたことが奇妙なことがわかります。 – unwind
@unwind:list.hがカーネルのlinuxで使われていることは分かっています。しかし、私はlist.hのこの答えを与えるリンクでは、list.hの別の配布は、それはLinuxのユーザー空間で動作し、それは移植性があります。私が開発したすべてのユーザー空間アプリケーションでそれを使用し、うまく動作します。 – MOHAMED
@unwind私が答えとして与えるリンクのこの段落を参照してください。http://isis.poly.edu/kulesh/stuff/src/klist/ 'リスト項目のハードウェアプリフェッチを削除することで、ほとんど変更はありませんまた、このリストをアプリケーションで使用してください。このファイルの利用可能なバージョンはここからダウンロードできます。 – MOHAMED
CがありますC++のようなテンプレートはありませんが、#define
マクロを使って "賢い"(または見た目に応じてWTFey)のようなものを実現できます。
しかし、たとえばGLibがsingly linked listsまたはdoubly linked listsのためにどのように処理するかを見てみましょう。
+1または "WTFey" – Brendan
テンプレートはC++の機能ですが、一重または二重リンクリストの型に依存しない実装を希望する場合は、マクロの助けを借りて作成するか、単純に構造体にvoid*
ポインタを格納します。
もちろん、このような実装はインターネット上にたくさんあります。 @MohamedKALLELと@hydeはすでにLinuxカーネルとGLibからの例を示しています。ちょっとしたライブラリであるuthashに関する注釈を追加したいと思います。
それはCでハッシュテーブルを実装し、それはまたsingly-と二重結合(さらに円形の)実装utlist.hを有するマクロに完全を示しています。つまり、このファイルを取り出し、組み込み、そのまま使用することも、必要に応じて変更することもできます。また、あなたのデータ構造のどれでもそれを使用することができます:それはnext
ポインタ(および二重リンクの場合はprev
)を持つ必要があります。
p.s.しかし、いつもマクロを使用するときは覚えておいてください:大きな力があるのは大きな責任です。。マクロは強力ですが、非常に安全ではありません。注意してください!
こんにちは連結リストについては知らないが、テンプレート関数のためにuは、おそらくこのプログラム
#include <stdarg.h>
#include <stdio.h>
#define INT 0
#define STR 1
void foo(int type, ...)
{
va_list ap;
int i;
char *s;
va_start(ap, type);
switch(type) {
case INT:
i = va_arg(ap, int);
printf("INT: %i\n", i);
break;
case STR:
s = va_arg(ap, char *);
printf("STR: %s\n", s);
break;
default:
break;
}
va_end(ap);
}
#define SWAP(type, a, b) { \
type t; \
t = a; \
a = b; \
b = t; \
}
int main(void)
{
foo(INT, 3);
foo(STR, "baz");
int ia = 0, ib = 3;
SWAP(int, ia, ib);
printf("%i %i\n", ia, ib);
float fa = 0.5, fb = 3.14;
SWAP(float, fa, fb);
printf("%f %f\n", fa, fb);
return 0;
}
は出力を生成します例として、マクロまたは可変引数を持つ関数を使用することができます
INT: 3
STR: baz
3 0
3.140000 0.500000
- 1. Photoshop - プログラミング言語はありますか?
- 2. プログラミング言語を別の言語に変換するツールはありますか?
- 3. C#のようなイベントがDプログラミング言語にあります
- 4. ゲームボーイC言語のプログラミングC
- 5. 関数は、Cプログラミング言語
- 6. エンティティコンポーネントのプログラミング専用の言語はありますか?
- 7. グローバル変数のないプログラミング言語はありますか?
- 8. プログラミング言語の一覧はありますか?
- 9. Dプログラミング言語用のゲーム/グラフィックスエンジンはありますか?
- 10. "Ç"という名前のプログラミング言語はありますか?
- 11. Dプログラミング言語用のGNU Make-typeプログラムはありますか?
- 12. コンテストのプログラミング言語はありますか?
- 13. 非シングルトンモジュールのプログラミング言語はありますか?
- 14. CGIアプリケーション用のプログラミング言語はありますか?
- 15. あなたのプログラミング言語はブラウザ(つまり、JavaScript)にありますか?
- 16. 完全なアスペクト指向プログラミング言語はありますか?
- 17. for-whileループを持つプログラミング言語はありますか?
- 18. C言語プログラミングのstrcat()
- 19. 論理またはCプログラミング言語
- 20. どのプログラミング言語がこれにあたりますか?
- 21. なぜ多くのプログラミング言語がありますか?
- 22. C言語でAndroidプログラミング
- 23. cプログラミング言語 - declare()関数
- 24. プログラミング言語 "C Set 2"
- 25. Cプログラミング言語の "1ULL"の意味は?
- 26. ABAP内から呼び出せるライブラリ(Cプログラミング言語インタフェースあり)はありますか?
- 27. MWテンプレートに現実のプログラミング言語を使用する方法はありますか?
- 28. extern "C"はC言語で効果がありますか?
- 29. 1からカウントを開始するプログラミング言語はありますか?
- 30. Cプログラミング言語のスレッドのタイマー
ここで「テンプレート」とはどういう意味ですか? – cnicutar
テンプレートは、関数とクラスがジェネリック型で動作することを可能にするC++プログラミング言語の機能です。 –
ありがとうございました – user1722022