//尾加
int SPQueue_Append(SPQueue* queue, void* item)
{
TSPQueue* SPQueue = (TSPQueue*)queue;
int ret = 0;
if (NULL != SPQueue)
{
ret = LinkStack_Push(SPQueue->instack,item);
}
return ret;
}
//删除头部
void* SPQueue_Retrieve(SPQueue* queue)
{
TSPQueue* SPQueue = (TSPQueue*)queue;
void * ret = NULL;
if (NULL != SPQueue)
{
//当outstack长度为0时,把instack中的数据移入outstack
if (LinkStack_Size(SPQueue->outstack) == 0)
{
while (LinkStack_Size(SPQueue->instack) > 0)
{
LinkStack_Push(SPQueue->outstack,LinkStack_Pop(SPQueue->instack));
}
}
//取出outstack的栈顶
ret = LinkStack_Pop(SPQueue->outstack);
}
return ret ;
}
//获得头部
void* SPQueue_Header(SPQueue* queue)
{
TSPQueue* SPQueue = (TSPQueue*)queue;
void * ret = NULL;
if (NULL != SPQueue)
{
if (LinkStack_Size(SPQueue->outstack) == 0)
{
while (LinkStack_Size(SPQueue->instack) > 0)
{
LinkStack_Push(SPQueue->outstack,LinkStack_Pop(SPQueue->instack));
}
}
ret = LinkStack_Top(SPQueue->outstack);
}
return ret ;
}
//长度
int SPQueue_Length(SPQueue* queue)
{
TSPQueue* SPQueue = (TSPQueue*)queue;
int ret = 0;
if (NULL != SPQueue)
{
ret = LinkStack_Size(SPQueue->instack) + LinkStack_Size(SPQueue->outstack);
}
return ret;
}
运行结果:
第一次进队列:Header: 1
Length: 10
1 出队列了
2 出队列了
3 出队列了
4 出队列了
5 出队列了
第二次进队列:
Header: 6
Length: 5
6 出队列了
7 出队列了
8 出队列了
9 出队列了
10 出队列了
1 出队列了
2 出队列了
3 出队列了
4 出队列了
5 出队列了
6 出队列了
7 出队列了
8 出队列了
9 出队列了
10 出队列了
请按任意键继续。 . .
如有错误,望不吝指出。