|
struct __SLink
{
struct __SLink *Next;
};
typedef struct __SLink __TLink;
typedef struct
{
__TLink *Object;
}__TQueue;
typedef struct
{
__TLink Link;
__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队列里)
{
return NULL;
}
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;
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|