1樓:myd7349
我找到的一些資料:
還有一些庫實現:
/甚至語言(ooc language,提供了乙個叫做 rock 的編譯器):
2.就是前面回答的知友提到的用 void * 型別的指標來實現泛型。這也有一些例子:
nanomsg 實現的 list,queue 等資料結構:
nanomsg/src/utils at master · nanomsg/nanomsg · GitHub
12 年的時候,在 C語言吧看到乙個帖子,用的也是這種方法:
【 C 語言吧 · 編寫xx管理系統必看,內有指導教程】_c語言吧
3. 效仿 CPython 的做法
看看 CPython 是如何用 C 這樣不那麼物件導向的語言來構建 Python 這樣一門物件導向程式設計語言的。
比如,PyObject 是這樣定義的:
cpython/object.h at master · python/cpython · GitHub
然後,PyDictObject 是這樣定義的:
cpython/dictobject.h at master · python/cpython · GitHub
由於 PyDictObject 和 PyObject 具有相同的結構體頭部,看起來就像是 PyDictObject 繼承自 PyObject 一樣。此外,PyDictObject * 轉換為 PyObject * 也變得合理了。
具體可以讀一下《Python 原始碼剖析》
4. Glib
GLib
C Analog To STL
根據 wikipedia,glib 中實現了這些資料結構:鍊錶、雜湊表、字串、二叉樹、動態陣列等等。
2樓:luikore
__typeof__ 是很好用, 給乙個泛型動態陣列的例子:
#pragma once
#include
#include
#define DA_(ElemType) struct
#define DA_INIT(da) do while(0)
#define DA_CLEANUP(da) do while(0)
#define DA_PUSH(da, e) do \
_da_DA_PUSH->data[_da_DA_PUSH->size++] = *e;\
} while(0)
#define DA_SIZE(da) ((da)->size)
#define DA_AT(da) ()
使用例:
DA_(
int)da;
DA_INIT(&
da);
// 初始化堆記憶體
DA_PUSH(&
da,3);
DA_PUSH(&
da,"foo"
);// 出錯, 編譯器會檢查型別
DA_CLEANUP(&
da);
// 釋放堆記憶體
#include
#include
#define DA_(DAType, ElemType)\
struct DAType ;\
\static void DAType##_DA_init(struct DAType* da) \
\static void DAType##_DA_cleanup(struct DAType* da) \
\static void DAType##_DA_push(struct DAType* da, ElemType e) \
da->data[da->size++] = e;\}\\
static size_t DAType##_DA_size(struct DAType* da) \
\static ElemType* DAType##_DA_at(struct DAType* da, size_t i) \
\static struct const DAType = ;\
用起來就像這樣
DA_(
IntArray
,int
);...
struct
IntArrayd;
IntArray
.init(&
d);IntArray
.push(&
d,4);
IntArray
.size(&
d);IntArray.at
(&d,
0);IntArray
.cleanup(&
d);為什麼不把所有東西都 cast void* 呢? 因為那樣寫錯了型別的話編譯器是沒法給你發現的, 而且編譯器缺少型別資訊也做不了某些優化, 所以不建議.
求教C語言資料結構題
0x76 比如int removeDuplicates int array int array size else current array i return array size 函式返回新的陣列長度,可見複雜度並不是 如果陣列元素資料範圍較小,可以使用計數陣列。比如,假設 0 array i ...
有哪些用 Python 語言講演算法和資料結構的書?
黃哥 黃哥 黃哥推薦的八本資料結構和演算法 Python描述 書。Data Structures and Algorithms in Python Data Structures and Algorithms Using Python and C Data Structures and Algori...
《資料結構與演算法分析C語言描述》真的適合初學者嗎
看前言 本書適合作為高階資料結構 CS7 課程或是研究生第一年演算法分析課程的教材。學生應該具有中等程度的程式設計知識,包括像指標和遞迴這樣一些內容,還要具有離散數學的某些知識。 法布 初學者看這個會覺得很吃力,注意看一下這本書前言中的介紹 本書適合作為高階資料結構 CS7 課程或者研究生第一年演算...