循环队列的相关操作

来源:互联网 发布:数据库count函数怎么用 编辑:程序博客网 时间:2024/05/16 05:11
循环队列的相关操作
#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define MAXQSIZE 100#define OK 1#define ERROR 0#define True 1#define False 0#define OVERFLOW -1typedef int Status;typedef struct{   int *base;    int front;   int rear;}SqQueue;//构建循环队列Status InitQueue(SqQueue *Q){     Q->base=(int *)malloc(MAXQSIZE*sizeof(int));     if(!Q->base) exit(OVERFLOW);     Q->front=Q->rear=0;          return OK; }//插入操作 Status EnQuenu(SqQueue *Q,int e){   if((Q->rear+1)%MAXQSIZE==Q->front)//判断队列是否已满      return ERROR;       Q->base[Q->rear]=e; //插入元素 ,队列的插入只能从队尾    Q->rear=(Q->rear+1)%MAXQSIZE;//rear后移    return OK;   } //删除操作 Status DeQueue(SqQueue *Q){     if(Q->front==Q->rear) //判断是否为空队列       return ERROR;     Q->front=(Q->front+1)%MAXQSIZE;//将front向后边移动,队列的删除只能从队头     return OK; }//向队列中传入数据 Status PasQueue(SqQueue *Q,int n) {  int i;  if(n>MAXQSIZE)     return ERROR;  else   {    Q->front=Q->rear=0;     for(i=0;i<n;i++)     {      printf("base[%d]=",i);      scanf("%d",&Q->base[i]);      Q->rear++;     }      }     return OK;     }Status SqQueueTrave(SqQueue Q){    if(Q.front==Q.rear)     return ERROR;    int i;       if(Q.front>Q.rear) //若Q.front<Q.rear     {     for(i=Q.front;i<MAXQSIZE;i++)      {      if(!Q.base[i])      continue;      printf("%4d",Q.base[i]);      }      for(i=0;i<Q.rear;i++)      printf("%4d",Q.base[i]);    }    else   //若Q.front>Q.rear     {     for(i=Q.front;i<Q.rear;i++)      printf("%4d",Q.base[i]);      }   printf("\n");       }int main(){    int n,e;    char c;    SqQueue Q;    InitQueue(&Q);    printf("\n 1.队列的初始化\n 2.插入元素\n 3.删除元素\n 4.退出\n请输入你的选择\n");      while(c!='0')    {         scanf("%c",&c);       switch(c)       {          case'1':          printf("输入首次向队列传入数据的长度:");          scanf("%d",&n);          PasQueue(&Q,n);          SqQueueTrave(Q);          break;         case'2':          printf("请输入插入的元素:");          scanf("%d",&e);          EnQuenu(&Q,e);          SqQueueTrave(Q);           break;         case'3':          DeQueue(&Q);          SqQueueTrave(Q);          break;         case'0':           exit(0);         default:           break;               }     }    system("pause");} 

原创粉丝点击