循环队列

来源:互联网 发布:云南大学 知乎 编辑:程序博客网 时间:2024/05/21 12:49
#include<iostream>#include<cstdio>#include<stdlib.h>#include<malloc.h>#define MAXSIZE 100#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2using namespace std;typedef int ElemType;typedef int Status;typedef struct{    ElemType* base;    int front;    int rear;}SQueue;Status EmptyQueue(SQueue&q){    if(q.front==q.rear)return OK;    return ERROR;}Status InitQueue(SQueue& q){    q.base=(ElemType*)malloc(sizeof(ElemType)*MAXSIZE);    if(!q.base)exit(ERROR);    q.front=q.rear=0;}Status EnQueue(SQueue& q,ElemType e){    if((q.rear+1)%MAXSIZE==q.front)return ERROR;    q.base[q.rear]=e;    q.rear=(q.rear+1)%MAXSIZE;    return OK;}Status Dequeue(SQueue& q,ElemType&e){    if(EmptyQueue(q)){        return ERROR;    }    e=q.base[q.front];    q.front=(q.front+1)%MAXSIZE;    return OK;}int getSqeueLength(SQueue q){    return (q.rear-q.front+MAXSIZE)%MAXSIZE;    //当rear>front时,rear-front    //当rear<front时,为(0+rear) +MAXSIZE-front    //故综合起来为返回的表达式的值  }int main(){    SQueue sq;    InitQueue(sq);    for(int i=0;i<10;i++){        EnQueue(sq,i);    }    int t;    cout<<"length1: "<<getSqeueLength(sq)<<endl;    while(!EmptyQueue(sq)){        Dequeue(sq,t);        cout<<t<<" ";    }    cout<<"length2: "<<getSqeueLength(sq)<<endl;}
原创粉丝点击