能否用两个栈实现一个队列的功能
来源:互联网 发布:ubuntu iso 下载 编辑:程序博客网 时间:2024/05/16 19:11
结点结构体:
typedef struct node
{
int data;
node *next;
}node,*LinkStack;
创建空栈:
LinkStack CreateNULLStack( LinkStack &S)
{
S = (LinkStack)malloc( sizeof( node ) ); //申请新结点 ,带头结点
if( NULL == S)
{
printf("Fail to malloc a new node.\n");
return NULL;
}
S->data = 0; //初始化新结点
S->next = NULL;
return S;
}
栈的插入函数:设计的是一个带头结点的栈,插入和删除操作都在头结点后
LinkStack Push( LinkStack &S, int data)
{
if( NULL == S) //检验栈
{
printf("There no node in stack!");
return NULL;
}
LinkStack p = NULL;
p = (LinkStack)malloc( sizeof( node ) ); //申请新结点
if( NULL == p)
{
printf("Fail to malloc a new node.\n");
return S;
}
if( NULL == S->next)
{
p->next = NULL;
}
else
{
p->next = S->next;
}
p->data = data; //初始化新结点
S->next = p; //插入新结点
return S;
}
出栈函数:
node Pop( LinkStack &S)
{
node temp;
temp.data = 0;
temp.next = NULL;
if( NULL == S) //检验栈
{
printf("There no node in stack!");
return temp;
}
temp = *S;
if( S->next == NULL )
{
printf("The stack is NULL,can't pop!\n");
return temp;
}
LinkStack p = S ->next; //节点出栈
S->next = S->next->next;
temp = *p;
free( p );
p = NULL;
return temp;
}
双栈实现队列的入队函数:
LinkStack StackToQueuPush( LinkStack &S, int data)
{
node n;
LinkStack S1 = NULL;
CreateNULLStack( S1 ); //创建空栈
while( NULL != S->next ) //S出栈入S1
{
n = Pop( S );
Push( S1, n.data );
}
Push( S1, data ); //新结点入栈
while( NULL != S1->next ) //S1出栈入S
{
n = Pop( S1 );
Push( S, n.data );
}
return S;
}
说明:用两个栈能够实现一个队列的功能,那用两个队列能否实现一个队列的功能呢?结果是否定的,因为栈是先进后出,将两个栈连在一起,就是先进先出。而队列是现先进先出,无论多少个连在一起都是先进先出,而无法实现先进后出。- 能否用两个栈实现一个队列的功能
- 用两个栈实现一个队列的功能&&用两个队列实现一个栈的功能
- 用两个栈实现一个队列,用两个队列实现一个栈的功能
- 两个队列实现一个栈的功能
- 两个栈实现一个队列的功能
- 两个栈实现一个队列的功能
- 两个栈实现一个队列的功能
- 用两个栈实现一个队列功能
- 用两个栈实现一个队列功能
- 用两个栈实现一个队列功能
- 用两个栈实现一个队列的功能
- 用两个栈实现一个队列的功能
- 用两个栈实现一个队列的功能...
- 用两个栈实现一个队列的功能
- 用两个栈实现一个队列的功能
- 用两个栈实现一个队列的功能
- 用两个栈实现一个队列的功能
- 用两个栈实现一个队列的功能
- 图像投影特征图的波峰波谷查找的相关原理及利用差分遍历法查找波峰的OpenCV代码
- Adapter中的getView()方法只走了两遍
- python安装NumPy
- (OK) Android 6.0 (Marshmallow) Install apk - INSTALL_FAILED_INVALID_URI
- 【计算机基础】Unicode字符集 与 多字节字符集
- 能否用两个栈实现一个队列的功能
- 【电脑知识】:如何设置桌面存储路径
- android开发常用快捷键
- Linux内存管理之mmap详解
- VS2013 C/CPP 调试教程
- ios 开发 观察 完整的Android应用开发概述
- WPS文字中如何使各章节页眉不同?
- python os模块
- ccah-500 第24题 Which two features does Kerberos security add to a Hadoop cluster