数据结构队列例题一顺序实现

仅供个人复习使用

#include
#define MAXSIZE 6

using namespace std;

typedef struct
{
	int *base;
	int front;
	int rear;
		
}sqQueue;

void Init(sqQueue &Q) //初始化 
{
	Q.base = new int[MAXSIZE];
	Q.front = Q.rear = 0;
}
int QueueLength(sqQueue Q)//求队列长度
{
	return (Q.rear - Q.front + MAXSIZE) % MAXSIZE; //防止队头在队尾后面 
}

void EnQueue(sqQueue &Q , int e)//插入数据 
{
	//一直插入队尾元素会造成数组逸出现象,事实上,如果队头元素有出队的话此时队列并不是满的
	//这种现象为"假逸出",巧妙的方法是把队列变成一个环状的空间,队列大小为M时,有M-1个元素就认为是队满 
	if( (Q.rear + 1) % MAXSIZE == Q.front) // 循环意义上的队满 
	{
	 cout<<"队满"<<'\n';
	 return;
	}
	
	Q.base[Q.rear] = e; 
	Q.rear = (Q.rear + 1) % MAXSIZE;
	
}

void DeQueue(sqQueue &Q , int &e)//删除数据 
{
	if(Q.front == Q.rear) 
	{
		cout<<"队空"<<'\n';
	}
	e = Q.base[Q.front];
	Q.front = (Q.front + 1) % MAXSIZE;
}

int GetHead(sqQueue &Q)
{
 	if(Q.rear != Q.front)
	{
		return Q.base[Q.front];
	}
}
int GetRear(sqQueue &Q)
{
	if(Q.rear != Q.front)
	{
		return Q.base[(Q.rear - 1 + MAXSIZE) % MAXSIZE];//防止队尾指向0而数组越界 
	}
	
}

int main()
{
	sqQueue Q;
	Init(Q);
	int e = 0;
	cout<<"输入数据,输入-1时停止"<<'\n';
	
	while(1) 
	{ 
	 	int x;
		cin>>x; 
		if(x == -1) break; 
		EnQueue(Q,x);
	}
	
	cout<<"队列长度为:";
	cout<<QueueLength(Q)<<'\n';
	DeQueue(Q,e);
	cout<<"已删除队头数据:"<<e<<'\n';
	cout<<"队头元素为:"<<GetHead(Q);
	cout<<"队尾元素为:"<<GetRear(Q);
	return 0;
	
}

你可能感兴趣的:(严蔚敏数据结构,数据结构,c++)