0001 struct Bitmap { //位图Bitmap类:以空间作为补偿,节省初始化时间(既允许插入,亦支持删除) 0002 Rank* F; Rank N; //长度为N的数组F,记录[k]位被标记的次序(即该位下在栈T[]中的秩) 0003 Rank* T; Rank size; //与F等长的数组T中,长度为size的前缀记录了标记位各自在F中对应的秩 0004 Bitmap(Rank n = 64) //构造 0005 { N = max(64U, n); F = new Rank[N]; T = new Rank[N]; size = 0; } 0006 ~Bitmap() { delete[] F; delete[] T; } //析构 0007 void reset() { size = 0; } //在O(1)时间内销毁所有校验环,便可实现复位 0008 bool test(Rank k) { return (F[k] < size) && (k == T[F[k]]); } //O(1):虎符会合 0009 void set(Rank k) { if (!test(k)) { T[size] = k; F[k] = size++; } } //O(1):创建校验环 0010 void clear(Rank k) { //O(1):清除校验环,同时回收栈T的空闲单元 0011 if (test(k) && --size) //请确认在目标不存在、目标是最后一个元素,甚至空栈时均依然无误 0012 { F[T[size]] = F[k]; T[F[k]] = T[size]; } 0013 } //clear 0014 }; //Bitmap