利用栈实现队列(C语言实现)
//尾加
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 出队列了
请按任意键继续。 . .
如有错误,望不吝指出。
· [ASP.NET].net知识结构
· [VB.NET]VB.NET委托的使用
· [C#]c# Winform 保存修改后的配置
· [ASP.NET]ASP运行环境--.NetBox
· [C#]C#特性学习与使用
· [ASP.NET]asp.net使用Mysql乱码处理
· [C#]把Array说透
· [VB.NET]VB中用ADO对象动态创建数据库和表
· [C#]winform c#写ini文件


·JAVA Swing学习基础教程指南
·java8 安装使用教程
·专题:c指针编程指南
·认识全文检索引擎架构 Lucene
·深度理解Struts 2 框架
·集成开发环境 Eclipse 提高篇
·各种关系型数据库死锁的解决方案
·深入浅出讲解轻型数据库系统
·浅水也能摸鱼--JAVA虚拟机
·QT编程基础入门到精通