<pre name="code" class="cpp">#include <stdio.h>
#include <stdlib.h>
/*
用两个堆栈模拟实现一个队列
如果这两个堆栈的容量分别是m和n(m<n)
实现一个容量为2m的队列(栈m的top做队列头front,栈n的top做队列尾rear)
也可以实现容量为m+n的队列(栈m的top做队列尾rear,栈n的top做队列头front)
但是有操作约束: 如果 栈n中放了超过栈m容量的元素
则此队列删除所有栈m的元素后不能再删除
把栈n压满后,不能再添加
*/
//用数组存储实现 因为数组长度在定义时确定,可以用指针替换,与链表同理
//用单向链表存储实现 使用带头结点
typedef int ElementType;
/*
定义结构
*/
typedef struct _Node{
struct _Node* next;
ElementType data;
}Node;
typedef struct _stack{
Node* head;
int max;
int top;
}Stack;
typedef struct{
Stack* ms;
Stack* ns;
}Queue;
/*
函数声明
*/
//创建栈
Stack* createStack(int max);
//压栈
void push(Stack* sp,ElementType item);
//出栈
ElementType pop(Stack* sp);
//栈是否空
int isEmptyStack(Stack* sp);
//创建队列
Queue* createQ(int m,int n);
//队列添加元素
void addQ(Queue* myQ,ElementT
两个堆栈m和n(m<n)模拟一个队列,容量为m+m
最新推荐文章于 2022-09-13 19:31:04 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)