数据结构>>>数组与链表的应用>>循环队的顺序实现

循环队的顺序实现:

  • 结构描述
  • 初始化
  • 入队
  • 出队

下面是具体实现:

1.结构描述:

typedef struct Queue
{
	int *pBase;
	int front;
	int rear;
}QUEUE;

2, 初始化:

void init(QUEUE *pQ)
{
	pQ->pBase=(int *)malloc(sizeof(int)*6);
	pQ->front=0;
	pQ->rear=0;
}

3.入队

bool en_queue(QUEUE *pQ,int val)
{
	if(full_queue(pQ))
		return false;
	else
	{
		pQ->pBase[pQ->rear]=val;
		pQ->rear =(pQ->rear+1)%6;
		return true;
    }
}

4,出队:

bool out_queue(QUEUE *pQ,int *pVal)
{
	if(empt_queue(pQ))
		return false;
	else
	{
		*pVal=pQ->pBase[pQ->front];
		pQ->front =(pQ->front+1)%6;
		return true;
	}
}

------》源代码:

#include<iostream>
#include<malloc.h>
#include<stdlib.h>
using namespace std;

//1.结构描述:
typedef struct Queue
{
	int *pBase;
	int front;
	int rear;
}QUEUE;

//2.初始化:
void init(QUEUE *pQ)
{
	pQ->pBase=(int *)malloc(sizeof(int)*6);
	pQ->front=0;
	pQ->rear=0;
}

//判满:
bool full_queue(QUEUE *pQ)
{
	if((pQ->rear+1)%6==pQ->front )
		return true;
	else
		return false;
}

//判空:
bool empt_queue(QUEUE *pQ)
{
	if(pQ->front ==pQ->rear)
		return true;
	else
		return false;
}

//3.入队:
bool en_queue(QUEUE *pQ,int val)
{
	if(full_queue(pQ))
		return false;
	else
	{
		pQ->pBase[pQ->rear]=val;
		pQ->rear =(pQ->rear+1)%6;
		return true;
    }
}

//遍历:
void traverse_queue(QUEUE *pQ)
{
	int t=pQ->front;
	while(t!=pQ->rear )
	{
		cout<<pQ->pBase[t]<<'\t';
		t=(t+1)%6;
	}
	cout<<endl;
}

//4.出队:
bool out_queue(QUEUE *pQ,int *pVal)
{
	if(empt_queue(pQ))
		return false;
	else
	{
		*pVal=pQ->pBase[pQ->front];
		pQ->front =(pQ->front+1)%6;
		return true;
	}
}

int main()
{
	QUEUE Q;
	int val;
	init(&Q);
	en_queue(&Q,1);
	en_queue(&Q,3);
	en_queue(&Q,5);
	en_queue(&Q,7);
	en_queue(&Q,9);
	en_queue(&Q,3);
	traverse_queue(&Q);

	if(out_queue(&Q,&val))
	cout<<"出队成功,队列出队的元素是:"<<val<<'\t';
	else
		cout<<"出队失败!"<<endl;
	traverse_queue(&Q);

	return 0;
}

如果是顺序队列那么就一定是循环队列,否则就太浪费了。

猜你喜欢

转载自blog.csdn.net/qq_43595030/article/details/90741123