C语言队列的顺序表示

#include <stdio.h>
#include <stdlib.h>


struct SeQueue{
    int MAXNUM;
    int f,r;
    int *q;
};
typedef struct SeQueue *PSeQueue;


/* 创建空队列*/
 PSeQueue creatEmptyQueue_seq(int m)
 {
     PSeQueue queue=(PSeQueue)malloc(sizeof(struct SeQueue));
     if(queue->f!=0||queue->r!=0){
        queue->q=(int)malloc(sizeof(int)*m);
       if(queue->q){
          queue->MAXNUM=m+1;
          queue->f=0;
          queue->r=0;
          return(queue);
       }
       else free(queue);
       }
    printf("Out of Space!!!\n");
    return NULL;
 }


/*判断队列是否为空*/
int isEmptyQueue_seq(PSeQueue paqu)
{
    return(paqu->f==paqu->r);
}


/*入队*/
void enQueue_seq(PSeQueue paqu,int x)
{
    if((paqu->r+1)%paqu->MAXNUM==paqu->f)
        printf("Full queue.\n");
    else{
        paqu->q[paqu->r]=x;
        paqu->r=(paqu->r+1)%paqu->MAXNUM;
    }
}


/*出队*/
void deQueue_seq(PSeQueue paqu)
{
     if(paqu->f==paqu->r)
        printf("Empty quque.\n");
     else
        paqu->f=(paqu->f+1)%paqu->MAXNUM;


}


/*取队列的头元素*/
 int frontQueue_seq(PSeQueue paqu)
 {
      if(paqu->f==paqu->r)
        printf("Empty quque.\n");
     else
        return(paqu->q[paqu->f]);
 }
int main()
{
    int m,b=1;
    PSeQueue A;
    printf("请输入顺序队列的大小:\n");
    scanf("%d",&m);
    A=creatEmptyQueue_seq(m);
    while(b==1){
         printf("请选择你要的操作:\n");
         printf("1:显示全部数据:\n");
         printf("2:入队:\n");
         printf("3:出队:\n");
         printf("4:取队列顶元素:\n");
         int op;
         int c,j,k,m1;
         scanf("%d",&op);
    switch(op){
        case 1:
            printf("显示全部数据:\n");
           j=A->r;
           k=A->f;
            for(k=0;k<j;k++)
                 printf("%d ",A->q[k]);
            break;
        case 2:
            printf("入队:\n");
            for(m1=0;m1<m;m1++){
            printf("请继续输入:\n");
            scanf("%d",&c);
            enQueue_seq(A,c);


            }


            break;
        case 3:
            printf("出队:\n");
            printf("%d\n",A->q[A->f]);
            deQueue_seq(A);
            break;
        case 4:
            printf("取队列头元素:\n");
            frontQueue_seq(A);
            printf("%d\n",A->q[A->f]);
    }
         printf("\n是否需要继续执行此类操作,需要操作请输入“1”,退出输入“0”\n");
         scanf("%d",&b);
         if(b==0){
             printf(" *** 退出执行! ***");
         }
    }
    return 0;
}



发布了23 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_35001005/article/details/51596530
今日推荐