队列(C++)

顺序队列

#include<stdio.h>
#include<stdlib.h>
typedef struct {
	int *elem;

	int queuesize;
	int rear=0;
	int front=0;
}Queue;
int InitQueue(Queue &s)
{
	s.elem=(int *)malloc(10*sizeof(int));

	s.queuesize=10;
	return 1;
}
int print(Queue s)
{
	while(s.front!=s.rear)
	{
		printf("%d",s.elem[s.front]);
		s.front++;
	}
}
int enQueue(Queue &s,int e)
{
	if(s.rear==s.queuesize)
	{
		int *newbase;
		newbase=(int *)realloc(s.elem,(s.queuesize+10)*sizeof(int));
		s.elem=newbase;
		s.queuesize=s.queuesize+10;
	}
	s.elem[s.rear]=e;
	s.rear++;
	return 0;
}
int deQueue(Queue &s)
{
	if(s.front==s.rear)
	{
		return 0;
	}
	s.front++; 
 } 
 int QueueEmpty(Queue s)
 {
 	if(s.front==0&&s.rear==0)
 	{
 		return 1;
 		
	  } 
	  return 0;
 }
 void destroyQueue(Queue &s)
 {
 	 delete s.elem;
 }
 main()
{
	Queue s;
	InitQueue(s);
	int n;
	scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
    	int e;
    	scanf("%d",&e);
    	enQueue(s,e);
    	
	}
	deQueue(s);
//	destroyQueue(s);
	print(s);
	
}

链队

#include<stdlib.h>
#include<stdio.h>
#include<iostream>
using namespace std;
typedef struct QNode{
	  int data;
	  struct QNode *next;	
}QNode,*QueuePtr;
typedef struct {
	QueuePtr front;
	QueuePtr rear;
}QueueLink;
int InitQueue(QueueLink &s)
{
	s.rear=s.front=(QueuePtr)malloc(sizeof(QNode));
	s.front->next=NULL;
	return 0;
 }
 int Print(QueueLink &s)
 {
 	QueuePtr q;
 	q=s.front->next;
 	while(q!=NULL)
 	{
 		printf("%d",q->data);
 		q=q->next;
	 }
 }
int enQueue(QueueLink &s,int e)
{
	QueuePtr p;
	p=(QueuePtr)malloc(sizeof(QNode));
	p->data=e;
	p->next=NULL;
	s.rear->next=p;
	s.rear=p;
	return 0;
	
}
bool QueueEmpty(QueueLink s)
{
	if(s.front==s.rear)
	{
		return true;
	}
	return false;
}
int deQueue(QueueLink &s)
{
	if(s.front==s.rear)
	{
		return 0;
	}
	s.front=s.front->next;
}
int GetTop(QueueLink s)
{
	if(s.rear==s.front)
	{
		return 0;
	}
	int x;
	x=s.front->next->data;
	return x;
}
int GetLength(QueueLink s)
{
	QueuePtr p;
	p=s.front->next;
	int i=1;
	while(p!=NULL)
	{
		i++;
		p=p->next;
	 } 
	 return i-1;
 } 
 int main()
 {
    QueueLink s;
	InitQueue(s);
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		int e;
	    cin>>e;
		enQueue(s,e);
	  
	 } 
	 
	 cout<<QueueEmpty(s)<<endl;
	 cout<<GetTop(s)<<endl;
	 cout<<GetLength(s)<<endl;
	 Print(s);
  } 

循序队

#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct{

	int *base;
	int front;
	int rear;
	int length;
	int queuesize;
}SQueue;
int InitQueue(SQueue &s)
{
	s.base=(int*)malloc(10*sizeof(int));
	s.rear=s.front=0;
	s.length=0;
	s.queuesize=10;
	return 0; 
 }
 int Print(SQueue s)
 {
 	int k=s.front;
 	for(int i=0;i<s.length;i++)
 	{
 		cout<<s.base[k]<<" ";
	    k=(k+1)%s.queuesize;
	 }
  } 
 int enQueue(SQueue &s,int e)
 {
 	if(s.length==s.queuesize)
 	{
 		return 0;
	}
	s.base[s.rear]=e;//元素入队
    s.rear=(s.rear+1)%s.queuesize;//位置后移
    s.length++;//元素个数增加
	 
 }
 int deQueue(SQueue &s)
 {
 	if(s.length==0)
 	{
 		return 0;
	}
	 s.front=(s.front+1)%s.queuesize;
	 s.length--;
	 return 1;
 }
 int getHead(SQueue s)
 {
 	if(s.length==0)
 	{
 		return 0;
	}
	return s.base[s.front];
} 
bool QueueEmpty(SQueue s)
{
    if(s.length==0)
  	{
  		return true;
	}
	return false;
}
int main()
{
	SQueue s;
    InitQueue(s);
    int n;
    cin>>n;
	for(int i=0;i<n;i++)
	{	
	    int e;
	    cin>>e;
		enQueue(s,e);
		
	}
    deQueue(s);
	Print(s); 
}

注:循环队列的长度:s.length=(s.rear-s.front+s.queuesize)%s.queuesize;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
顺序队列是一种基于数组实现的队列,它的特点是先进先出,即先进入队列的元素先出队列。下面是一个简单的顺序队列的实现,使用C++语言: ```cpp const int MAXSIZE = 100; // 队列最大容量 class SeqQueue { private: int data[MAXSIZE]; // 存储队列元素的数组 int front; // 头指针 int rear; // 尾指针 public: SeqQueue() { front = rear = -1; // 初始化头和尾指针 } bool isEmpty() { return front == rear; // 队列为空的条件是头指针和尾指针相等 } bool isFull() { return rear == MAXSIZE - 1; // 队列已满的条件是尾指针指向数组的最后一个元素 } bool enQueue(int x) { // 入操作 if (isFull()) return false; // 如果队列已满,返回false rear++; // 尾指针加1 data[rear] = x; // 将元素x存入尾指向的位置 return true; } bool deQueue(int& x) { // 出操作 if (isEmpty()) return false; // 如果队列为空,返回false front++; // 头指针加1 x = data[front]; // 取出头元素 return true; } }; ``` 在这个实现中,我们将队列元素存储在一个数组中,使用front和rear分别指向队列的头部和尾部。isEmpty和isFull方法用于判断队列是否为空或已满。enQueue方法用于将元素加入队列尾部,deQueue方法用于从队列头部取出元素。 需要注意的是,这个实现中没有考虑队列的扩容问题,如果队列已满,入操作将会失败。在实际应用中,需要根据具体情况来进行扩容操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值