数据结构与算法课后题-第三章(顺序队和链队)











cpp 复制代码
#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;
}
cpp 复制代码
#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;
}
相关推荐
机器人零零壹17 分钟前
技术白皮书:iRobotCAM如何解决机器人激光切割应用中的核心难点,从CAD离线编程到双目视觉定位与轨迹自适应提升复杂空间曲线切割的精度、效率与柔性化水平
人工智能·算法
ZhengEnCi3 小时前
大模型的分类到底怎么分:从基础模型到推理模型、从通用到专用的完整图谱
算法
取名真是4 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
罗西的思考4 小时前
【轻量化复刻大模型 / KIMI K3】KDA 模块交互式演示
人工智能·算法·机器学习
nm_zfyjt6 小时前
信息流广告投放优化实践:线索成本评估模型与转化链路重构(家装建材案例)
算法·重构·内蒙古朋友圈广告服务商·内蒙古朋友圈获客
w_zero_one7 小时前
算法--构造
java·数据结构·算法
其实防守也摸鱼8 小时前
信创安全竞赛知识总结与题库
大数据·网络·人工智能·算法·安全·php
小超人诞生日记9 小时前
C++ 智能指针的使用及其原理详解
c++·算法
lisw0511 小时前
互联网上的数据结构可视化!
数据结构·信息可视化