⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p386.cpp

📁 包含常见的数据结构的类和函数
💻 CPP
字号:
#include "P384.cpp"			void PageRemove ( const TwoChars & key, const paddr p )			//从p所指的页块中删去关键码key。这是顺序表的删除算法, 可参看第2章。			{				for (int i=0;i<p->Count;i++)					if (p->Names[i]==key)					{						p->Count--;						p->Names[i]=p->Names[p->Count];						return;					}							}     	   void combine ( unsigned int index ) {				   if ( DicDepth == 0 ) return;					   		   int buddyid= buddy (index);					//伙伴页块的二进制 地址			   paddr p = Directory[index];						//index页块和伙伴页块指针		   paddr s = Directory[buddyid];		   if ( (buddyid>=0) && ((p->Count + s->Count) <= PageSize )) {				//看该页块与其伙伴的总关键码个数是否超出一页限制, 未超出, 合并页块			 			 			 for ( int i=0; i<s->Count; i++ ) {				//将伙伴中内容全部移到index页块			   			   p->Names[p->Count] = s->Names[i];			   p->Count++; 			 }			 delete s;   p->PgDepth--;					//释放伙伴页块, index页块深度减1			 Directory[buddyid] = p;							 unsigned int DirSize = Power2(DicDepth);				//计算目录项数			 unsigned int NewDirSize = DirSize / 2;					//如果紧缩,新的目录项数			 for ( i=0; i<NewDirSize; i++ )					//判断是否要紧缩目录			   if ( Directory[i] != Directory[NewDirSize+i] ) return; 															//不需紧缩目录, 结束处理返回			 			 paddr *NewDir = Directory;			 DicDepth--;				//目录深度减1			 Directory = new paddr[NewDirSize];			//创建新目录			 for ( i=0; i<NewDirSize; i++ ) Directory[i] = NewDir[i];			 delete [ ] NewDir;			 if (index<NewDirSize) combine ( index ); else combine(buddyid);							//递归, 看是否继续合并 		   }		}		void Remove ( const TwoChars & key ) {				//搜索并删去关键码key		   unsigned int id = makeAddress ( key, DicDepth );			//寻找关键码key所在页块的二进制地址		   paddr p = Directory [id];						//搜索key所在页块		   if ( p ) {									//找到, p是指向该页块的指针			 PageRemove ( key, p );						//从p所指页块中删去关键码key			 combine ( id );							//判断是否合并页块与紧缩目录		   }		}		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -