【数据结构笔记】线性表-队列(顺序存储实现)

#include <iostream>
#define MaxSize 10
using namespace std;
/* 顺序存储实现队列 */

typedef struct{
	int data[MaxSize];		//静态数组存放数据元素(一片连续空间) 
	int front,rear;			//队头、队尾指针 (队头指针指向队头元素,队尾指针指向队尾的后一个元素(接下来应该插入数据元素的位置) 
}SqQueue;

//初始化 
void InitQueue(SqQueue &Q){
	Q.rear=Q.front=0;  //rear和front值相同,地址不同,初试状态,队头队尾指针指向0 
} 


//初始化(当rear指向的是队尾元素)
void InitQueue2(SqQueue &Q){
	Q.front=0;
	Q.rear=MaxSize-1;  		//这样插入第一个元素时rear在0; 
} 
//判断队列是否为空 
bool QueueEmpty(SqQueue Q){
	if(Q.rear==Q.front)
		return true;
	else
		return false;
}

//入队操作(只能从队尾方向) 
bool EnQueue(SqQueue &Q,int x){
	if((Q.rear+1)%MaxSize==Q.front)			//队列是否存满?静态数组容量有限;而这个判定条件不能是rear==MaxSize,因为存满后从队头出队,rear也==MaxSize; 
		return false;	//当rear下一个位置是front,已经存满,而rear当前存储空间浪费掉 
	Q.data[Q.rear]=x;
	Q.rear=(Q.rear+1)%MaxSize;   //当存满后,rear==MaxSize,又重新指到0的位置,若队头有出队,可以在队头继续插入;也成为循环队列 
	return true;
}

//入队操作(rear指向当前队尾元素时)
bool Enqueque2(SqQueue &Q,int x){
	if((Q.rear+1)%MaxSize==Q.front)
		return false;
	Q.rear=(Q.rear+1)%MaxSize;
	Q.data[Q.rear]=x;
	return true;
	
} 

//出队(从队头)操作
bool DeQueue(SqQueue &Q,int x){
	if(Q.rear==Q.front)		//队列为空
		return false;
	x=Q.data[Q.front];		//带回被删除值 
	Q.front=(Q.front+1)%MaxSize; 
	return true;
} 

//读取队头元素
bool GetHead(SqQueue Q,int x){
	if(Q.rear==Q.front)		//空队列
		return false;
	x=Q.data[Q.front];
	return true; 
} 

//(rear+MaxSize-front)%MaxSize==队列元素个数

//其他判断队列是否满了的方法

//定义一个变量size作为队列当前长度
 
typedef struct{
	int data[MaxSize];
	int front, rear;
	int size;
}SqQueue2;

void InitQueue2(SqQueue2 &Q){
	Q.front=Q.rear=Q.size=0;   //作插入和删除时size++或size-- 
}

//定义一个type判断最近一次的操作是删除0还是插入1(只有删除操作队列才会变空,插入操作才会使队列变满)
typedef struct{
	int front,rear;
	int tag;		//当front==rear && tag==1,队满;当front==rear && tag==0,队空 
}SqQueue3;

void testQueue(){
	SqQueue Q;  //声明一个队列 
	InitQueue(Q); 

} 

int main(int argc, char** argv) {
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值