#include <iostream> //引入头文件
using namespace std;
typedef int Elemtype;
#define Maxsize 5
#define ERROR 0
#define OK 1
typedef struct
{
Elemtype data[Maxsize];
int front, rear;
int tag;
}SqQueue;
void InitQueue(SqQueue& Q) //初始化队列
{
Q.rear = Q.front = 0;
Q.tag = 0;
}
bool isEmpty(SqQueue Q) //判断队空
{
if (Q.rear == Q.front&& Q.tag==0 ) return OK;
else return ERROR;
}
bool EnQueue(SqQueue& Q, Elemtype x)
{
if (Q.front==Q.rear&&Q.tag==1) //队满
{
cout << "堆满啦,请腾出些许空间" << endl;
return ERROR; //队满报错
}
Q.data[Q.rear] = x;
Q.rear = (Q.rear + 1) % Maxsize;
Q.tag = 1;
return OK;
}
bool DeQueue(SqQueue& Q, Elemtype& x) //队空报错
{
if (Q.rear == Q.front&&Q.tag==0) return ERROR;
x = Q.data[Q.front];
Q.front = (Q.front + 1) % Maxsize;
Q.tag = 0;
return OK;
}
int main(void)
{
SqQueue Q;
InitQueue(Q);
EnQueue(Q, 1);
EnQueue(Q, 2);
EnQueue(Q, 3);
EnQueue(Q, 4);
EnQueue(Q, 5);
for (int i = 0; i < Maxsize; i++)
printf("data[%d]=%d\n", i, Q.data[i]);
return 0;
}
#include <iostream> //引入头文件
using namespace std;
typedef int Elemtype;
#define Maxsize 5
#define ERROR 0
#define OK 1
//====================队列---这样是循环队列,需要牺牲一位====================//
typedef struct
{
Elemtype data[Maxsize];
int front, rear;
}SqQueue;
void InitQueue(SqQueue& Q) //初始化队列
{
Q.rear = Q.front = 0;
}
bool QueueEmpty(SqQueue Q) //判断队空
{
if (Q.rear == Q.front) return OK;
else return ERROR;
}
bool EnQueue(SqQueue& Q, Elemtype x) //进队
{
if ((Q.rear + 1) % Maxsize == Q.front) //判断队列是否满
{
cout << "堆满啦,请释放一些空间" << endl;
return ERROR; //队满报错
}
Q.data[Q.rear] = x;
Q.rear = (Q.rear + 1) % Maxsize;
return OK;
}
bool DeQueue(SqQueue& Q, Elemtype& x) //退队
{
if (Q.rear == Q.front) return ERROR; //判断队列是为空
x = Q.data[Q.front];
Q.front = (Q.front + 1) % Maxsize;
return OK;
}
//=====================================================================//
//========================堆栈---这样是顺序堆栈========================//
typedef struct
{
Elemtype data[Maxsize];
int top;
}SqStack;
void InitStack(SqStack& S)
{
S.top = -1;
}
bool StackEmpty(SqStack S)
{
if (S.top == -1) //堆空
return OK;
else //不空
return ERROR;
}
bool Push(SqStack& S, Elemtype x)
{
if (S.top == Maxsize - 1)
return ERROR;
S.data[++S.top] = x;
return OK;
}
bool Pop(SqStack& S, Elemtype& x)
{
if (S.top == -1)
return ERROR;
x = S.data[S.top--];
return OK;
}
bool GetTop(SqStack& S, Elemtype& x)
{
if (S.top == -1)
return ERROR;
x = S.data[S.top];
return OK;
}
//=====================================================================//
void Inverse(SqStack& S, SqQueue& Q)
{
int x = 0;
while (!QueueEmpty(Q))
{
DeQueue(Q,x);
Push(S, x);
}
Q.rear = Q.front = 0;
while (!StackEmpty(S))
{
Pop(S, x);
EnQueue(Q, x);
}
}
int main(void)
{
SqQueue Q;
SqStack S;
InitQueue(Q);
InitStack(S);
EnQueue(Q, 1);
EnQueue(Q, 2);
EnQueue(Q, 3);
EnQueue(Q, 4);
for (int i = 0; i < Maxsize; i++)
printf("data[%d]=%d\n", i, Q.data[i]);
Inverse(S, Q);
for (int i = 0; i < Maxsize; i++)
printf("data[%d]=%d\n", i, Q.data[i]);
return 0;
}