顺序队列初始化/入队/出队列/判断队空

时间:2022-12-06 17:26:21
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#define MAXSIZE 100
using namespace std;
//顺序队列的类型
struct sequeue{
int _queue[MAXSIZE] ;
int _front , _rear ;
};
//顺序队列的常用形式就是循环队列,循环队列的基本运算
void initqueue(struct sequeue *q){
q->_front = 0 ;
q->_rear = 0 ;
}
//入队列算法,若队列未满插入队尾并返回入队成功标志1,否则返回队列已满入队不成功标志0
int addqueue(struct sequeue * q , int x){
if(( q->_rear + 1 ) % MAXSIZE == q->_front)
return 0 ;
q->_rear = (q->_rear + 1) % MAXSIZE ;
q->_queue[q->_rear] = x ;
return 1 ;
}

//出队列算法,若队列不空,删除队头元素并返回其值,否则返回NULL
int outqueue(struct sequeue * q ){
if(q ->_front == q->_rear)
return NULL ;
q->_front =( q->_front + 1) % MAXSIZE ;
return q->_queue[q->_front] ;
}
//读队头元素,与出队列的差别仅在于没有修改队头指针
int getqueue(struct sequeue *q){
if(q->_front== q->_rear )
return NULL ;
return q->_queue[(q->_front+1) % MAXSIZE] ;
//注意,因为通常约定队尾指针指向当前队尾元素的实际位置,而队头指针指向当前队头元素实际位置的前一个位置

}
//判断队列为空,若队列为空则返回1,否则返回0
int isempty(struct sequeue * q){
if(q->_front == q->_rear)
return 1 ;
return 0 ;
}
int main(){
struct sequeue * r ;
r = (struct sequeue *)malloc(sizeof(struct sequeue)) ;
initqueue(r) ;
for(int i = 1 ; i<= 8 ; i++)
addqueue(r , i) ;
while(!isempty(r)){
int temp = outqueue(r) ;
cout<<"outqueue = "<< temp << endl ;
}
return 0 ;
}