#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>
typedef struct Node
{
int data;
struct Node *pNext;
}Node,*pNode;
typedef struct Stack
{
pNode pTop;
pNode pBottom;
}Stack,*pStack;
/*创建一个空栈,并返回指向该栈的指针*/
pStack createStack()
{
pStack ps=(pStack)malloc(sizeof(Stack));
ps->pTop=(pNode)malloc(sizeof(Node));
if(ps==NULL||ps->pTop==NULL)
return NULL;
else
{
ps->pBottom=ps->pTop;
ps->pBottom->pNext=NULL;
}
return ps;
}
/*判断该栈是否为空 */
bool isEmpty(pStack ps)
{
if(ps->pTop==ps->pBottom)
return true;
else
return false;
}
/*向ps指针指向的栈中压入数据val*/
void pushStack(pStack ps,int val)
{
pNode pNew =(pNode)malloc(sizeof(Node));
if(pNew==NULL)
return ;
else
{
pNew->data=val;
pNew->pNext=ps->pTop;
ps->pTop=pNew;
}
return;
}
/*从栈中退出数据,并将数据的保存在pData指针指向的位置*/
bool popStack(pStack ps,int* pData)
{
if(isEmpty(ps))
return false;
else
{
pNode p = ps->pTop;
*pData=p->data;
ps->pTop=p->pNext;
free(p);
p=NULL;
return true;
}
}
/*清空栈,即将其还原为空栈*/
void clearStack(pStack ps)
{
if(isEmpty(ps))
return;
else
{
pNode p = ps->pTop;
pNode r=NULL;
while(p!=ps->pBottom)
{
r=p->pNext;
free(p);
p=r;
}
ps->pTop=ps->pBottom;
}
}
/*用两个栈模拟入队*/
void enterQueue(pStack ps,int val)
{
pushStack(ps,val);
}
/*用两个栈模拟出对*/
bool deleteQueue(pStack ps1,pStack ps2,int *pData)
{
if(isEmpty(ps1)&&(isEmpty(ps2)))
return false;
if(!isEmpty(ps2))
popStack(ps2,pData);
else if(!isEmpty(ps1))
{
while(!isEmpty(ps1))
{
int ps1PopData;
popStack(ps1,&ps1PopData);
pushStack(ps2,ps1PopData);
}
popStack(ps2,pData);
}
return true;
}
int main()
{
int number; //保存操纵的个数
int data; //保存输入的要push的元素
int pData; //保存pop出来的元素
char *push = "PUSH";
char *pop = "POP";
char input[5];
int data_pop;
//创建两个栈
pStack ps1 = createStack();
pStack ps2 = createStack();
scanf("%d",&number);
while(number-->0)
{
scanf("%s",input);
if(strcmp(input,push)==0)
{
scanf("%d",&data);
enterQueue(ps1,data);
}
if(strcmp(input,pop)==0)
{
if(deleteQueue(ps1,ps2,&pData))
printf("%d\n",pData);
else
printf("-1\n");
}
}
clearStack(ps1);
clearStack(ps2);
return 0;
}
结果:
相关推荐
python 实现 用两个栈实现队列
用两个栈实现队列.md
title: 剑指Offer-用两个栈实现队列subtitle: 用两个栈实现队列categories: 剑指Offer用两个栈实现队列题目描述用两个栈来实现一
232. 用两个栈实现队列232. 用栈实现队列题目描述解题思路/** Initialize your data structure here. *//** R
9. 用两个栈实现队列题目链接牛客网题目描述用两个栈来实现一个队列,完成队列的 Push 和 Pop 操作。当元素要出栈时,需要先进入 out 栈,此时元素出栈
用两个栈实现队列思路很简单:入栈只入栈1出栈只从栈2出,出栈时如果栈2右元素则顶部元素出栈,否则让栈1元素全部压入到栈2,然后栈2最上面元素出栈代码如下:
两个栈 实现一个队列
队列的两种实现方式一种是数组一种是栈,此处介绍如何将用两个栈来实现一个队列
队列的声明如下,请实现它的两个函数 appendTail 和deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元示例:
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 2. 解题思路 2.1 分析 栈:先进后出 队列:先进先出 要求用两个栈{stack1,stack2}实现一个队列,也就是说我们需要使用栈的push和pop...
NULL 博文链接:https://dengqw.iteye.com/blog/2315246
本文实例讲述了PHP使用两个栈实现队列功能的方法。分享给大家供大家参考,具体如下: 问题 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 解决思路 两个栈。出栈的时候,如果栈2不为...
用量个栈实现一个队列,使其可以有进队和出队的操作。
题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 解题思路参考:https://blog.csdn.net/flower_48237/article/details/104055970
# Python实现《剑指offer》 部分代码自己添加了一些测试用例, 或者自己添加了一些功能 1. 初级程序员注重算法和数据结构 2. 事先做好准备,对工作有热情 3. 面试过程放松。不要急于写代码,了解清楚所要解决的问题,...
请完善以下代码有两个栈stackA、stackB,A是入栈的,B是出栈的,入栈时,直接进入A即可,出栈时,先判断是否有元素,如果B没有元素,pop肯定报错,应该
(若队列中没有元素,deleteHead 操作返回 -1 )链接:
使用面向对象技术,应用两个队列来实现一个栈,并且采用了类模板技术,实现的栈属于栈模板!
public void push(int node) {//压栈之前先将栈里的元素全部pop出来并push到另一个栈//压入新元素//将之前pop出去的元素再压