队列的顺序实现(入队、出队、对长、获取队头元素)

#include<stdio.h>
#define MAXSIZE 100

typedef struct{
 int *base;   //存储空间的基地址 
 int front; //头指针 
 int rear; //尾指针 
}SqQueue;

//初始化 
bool InitQueue(SqQueue &Q)
{
 //构造一个空队列Q
 Q.base=new int[MAXSIZE];
 if(!Q.base)
 return false;
 
 Q.front=Q.rear=0;
 return true; 
 } 

 
 //求队列的长度
 int QueueLength(SqQueue Q)
 {
  int length;
  length=(Q.rear-Q.front+MAXSIZE)%MAXSIZE; 
  printf("队列的长度:%d\n",length);
 return length; 
  } 

  //入队
 bool EnQueue(SqQueue &Q,int e)
 {
  if((Q.rear+1)%MAXSIZE==Q.front)   //判断队列是否已经满了 
  return false;
  
  Q.base[Q.rear]=e;
  Q.rear=(Q.rear+1)%MAXSIZE; //对我i指针+1 
  printf("入队的元素为:%d\n",e);
   return true;
  } 
  
  //出队
  bool DeQueue(SqQueue &Q,int &e){
   //删除Q的队头元素,用e返回其值
 if(Q.front==Q.rear)
 return false;
 e=Q.base[Q.front];  //将对头元素保存到e
 Q.front=(Q.front+1)%MAXSIZE;
 printf("出队的元素为:%d\n",e);
 return false;    
  }

  //取队头元素
  int GetHead(SqQueue Q)
{
   //返回Q的队头元素,不修改头指针
   if(Q.front!=Q.rear)
   printf("队头元素为:%d\n",Q.base[Q.front]); 
   return Q.base[Q.front]; 
} 

int main()
{
  SqQueue q;
 int e;
  InitQueue(q);
  QueueLength(q);
  EnQueue(q,1);
  EnQueue(q,2);
  EnQueue(q,3);
  EnQueue(q,4);
  QueueLength(q);
  DeQueue(q,e);
  DeQueue(q,e);
   QueueLength(q);
   GetHead(q); 
}
   
  
  
  

在这里插入图片描述

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
循环顺序队列是一种基于数组实现队列,其中尾指针可以循环到。下面是循环顺序队列入队获取队列度等操作的实现。 1. 初始化队列 在初始化队列时,需要指定队列的最大度,以便为队列分配必要的内存空间。同时,需要设置尾的初始位置。 ```c++ #define MAXSIZE 100 // 队列的最大度 typedef struct { int data[MAXSIZE]; // 存储队列元素 int front; // 指针 int rear; // 尾指针 } SqQueue; // 初始化队列 void InitQueue(SqQueue &Q) { Q.front = 0; Q.rear = 0; } ``` 2. 入队操作 在入队操作时,需要先判断队列是否已满。如果队列未满,则将新元素插入到尾,并将尾指针后移一位。如果尾指针已经到达数组末尾,则将其循环到数组的开。 ```c++ // 入队操作 bool EnQueue(SqQueue &Q, int x) { if ((Q.rear + 1) % MAXSIZE == Q.front) { // 队列已满 return false; } Q.data[Q.rear] = x; // 将新元素插入到尾 Q.rear = (Q.rear + 1) % MAXSIZE; // 尾指针后移一位 return true; } ``` 3. 操作 在操作时,需要先判断队列是否为空。如果队列不为空,则将指针后移一位,并返回元素。如果指针已经到达数组末尾,则将其循环到数组的开。 ```c++ // 操作 bool DeQueue(SqQueue &Q, int &x) { if (Q.front == Q.rear) { // 队列为空 return false; } x = Q.data[Q.front]; // 取元素 Q.front = (Q.front + 1) % MAXSIZE; // 指针后移一位 return true; } ``` 4. 获取队列获取队列度可以通过计算队列元素的个数来实现。由于尾指针可能现循环到数组开的情况,因此需要对指针和尾指针的值进行特殊处理。 ```c++ // 获取队列度 int QueueLength(SqQueue Q) { return (Q.rear - Q.front + MAXSIZE) % MAXSIZE; } ``` 完整代码如下: ```c++ #include <iostream> using namespace std; #define MAXSIZE 100 // 队列的最大度 typedef struct { int data[MAXSIZE]; // 存储队列元素 int front; // 指针 int rear; // 尾指针 } SqQueue; // 初始化队列 void InitQueue(SqQueue &Q) { Q.front = 0; Q.rear = 0; } // 入队操作 bool EnQueue(SqQueue &Q, int x) { if ((Q.rear + 1) % MAXSIZE == Q.front) { // 队列已满 return false; } Q.data[Q.rear] = x; // 将新元素插入到尾 Q.rear = (Q.rear + 1) % MAXSIZE; // 尾指针后移一位 return true; } // 操作 bool DeQueue(SqQueue &Q, int &x) { if (Q.front == Q.rear) { // 队列为空 return false; } x = Q.data[Q.front]; // 取元素 Q.front = (Q.front + 1) % MAXSIZE; // 指针后移一位 return true; } // 获取队列度 int QueueLength(SqQueue Q) { return (Q.rear - Q.front + MAXSIZE) % MAXSIZE; } int main() { SqQueue Q; InitQueue(Q); EnQueue(Q, 1); EnQueue(Q, 2); EnQueue(Q, 3); EnQueue(Q, 4); EnQueue(Q, 5); int length = QueueLength(Q); cout << "队列度为:" << length << endl; int x; DeQueue(Q, x); cout << "元素为:" << x << endl; length = QueueLength(Q); cout << "队列度为:" << length << endl; return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值