C/C++下一个队列函数,怎么移植到C#?
struct __SLink{
struct __SLink *Next;
};
typedef struct __SLink __TLink;
typedef struct
{
__TLink*Object;
}__TQueue;
typedef struct
{
__TLinkLink;
__TQueue *Queue;
}__TObject;
static inline void obj_put(__TQueue *Queue,__TObject *Object) //一般节点入队列
{
__TObject *PrevIterator,*Iterator; //上一个节点,当前节点
if(Object->Queue) //如果节点已经在队列里,返回(不能重复入队列)
return;
PrevIterator=(__TObject *)Queue; //把队列地址当做上一个节点
Iterator=(__TObject *)PrevIterator->Link.Next; //读取当前节点,即队列里的第一个节点
while(1)
{
if(Iterator == NULL) //如果Iterator为NULL,PrevIterator是最后一个节点,新节点插入在PrevIterator和Iterator(NULL)之间
{
break;
}
PrevIterator=(__TObject *)Iterator; //向后移动一个节点
Iterator=(__TObject *)Iterator->Link.Next;
}
PrevIterator->Link.Next=(__TLink *)Object; //新节点插入在PrevIterator和NULL之间
Object->Link.Next=NULL;
Object->Queue=Queue; //新节点关联到队列Queue
}
//取出首节点
//内核函数
static inline void *obj_get(__TQueue * Queue)
{
__TObject *Iterator;
Iterator=(__TObject *)Queue->Object; //读取队列里的第一个节点
if(Iterator!=NULL) //如果节点非空
{
Queue->Object=Iterator->Link.Next;//队列指向当前节点后面一个节点
Iterator->Queue=NULL; //当前节点脱离队列
Iterator->Link.Next=NULL;
}
return Iterator;
}
//删除节点
//内核函数
static inline void * obj_remove(__TQueue * Queue,__TObject *Object)//从队列中删除一个节点(用于一般队列)
{
__TObject *PrevIterator,*Iterator,*NextIterator; //上一个节点,当前节点,下一个节点
if(Object->Queue!=Queue) //如果被删除节点没有关联到队列Queue(即Object不在Queue队列里)
{
returnNULL;
}
PrevIterator=(__TObject *)Queue; //把队列地址当做上一个节点
Iterator=(__TObject *)PrevIterator->Link.Next; //读取当前节点,即队列里的第一个节点
if(Iterator==NULL) //队列为空,返回
{
return NULL;
}
NextIterator=(__TObject *)Iterator->Link.Next; //读取下一个节点
while(1)
{
if(Iterator==(__TObject *)Object) //如果当前节点就是被删除节点
{
PrevIterator->Link.Next=(__TLink *)NextIterator; // PrevIterator,NextIterator之间跳过当前节点
Iterator->Queue=NULL; //当前节点脱离队列
Iterator->Link.Next=NULL;
return Iterator;
}
if(NextIterator==NULL) //如果NextIterator为空,即Iterator是最后一个节点,返回NULL
{
return NULL;
}
PrevIterator=Iterator; //向后移动一个节点
Iterator=NextIterator;
NextIterator=(__TObject *)NextIterator->Link.Next;
}
// return NULL;
} System.Collections.Generic
Queue(T)类
System.Collections
Queue
何必需要自己移植C++的呢
系统提供的多好用
页:
[1]