C语言数据结构循环队列的相关操作(创建、出队、入队、取对头元素)

/*
*循环队列的创建
*循环队列的判断空或者满
*入队
*出队
*取对头元素
*/

#include<stdio.h>
typedef int element;
#define MAXSIZE 1024
typedef struct seq_queue
{
    element data[MAXSIZE];
    int rear;//队尾
    int front;//对头
}Seq_Queue;
Seq_Queue*creat_seqqueue();//循环队列的创建
int empty_seqqueue(Seq_Queue*s);//判断循环队列是否为空
int full_seqqueue(Seq_Queue*s);//判断循环队列是否已满
int enter_seqqueue(Seq_Queue*s,element x);//入队
int pop_seqqueue(Seq_Queue*s,element *x);//出队
int getdata_seqqueue(Seq_Queue*s,element *x);//取对头元素
int length_seqqueue(Seq_Queue*s);//求队列的长度
void main()
{
    Seq_Queue*s;
    element x,y,z;
    int len;
    s=creat_seqqueue();
    if(s==NULL)
        printf("循环队列创建失败:\n");
       else
        printf("循环队列创建成功:\n");
        if(empty_seqqueue(s))
            printf("该循环队列为空:\n");
          else
            printf("该循环队列不为空:\n");
            if(full_seqqueue(s))
            printf("该循环队列已满:\n");
          else
            printf("该循环队列没有满:\n");
            printf("请输入要入队的数据:\n");
              scanf("%d",&x);
              if(enter_seqqueue(s,x))
                printf("入队成功:\n");
                else
                    printf("入队失败:\n");
                   if(pop_seqqueue(s,&y))
                     printf("出队的元素为:%d\n",y);
                      else
                        printf("出队失败:\n");

                        printf("队列的长度为:%d\n",length_seqqueue(s));
                        if( getdata_seqqueue(s,&y))
                            printf("对头元素为:%d\n",y);
                          else
                            printf("取对头元素失败:\n");




}
int empty_seqqueue(Seq_Queue*s)//判断循环队列是否为空
{
    if(s->rear==s->front)
          return 1;
    else
        return  0;

}
int full_seqqueue(Seq_Queue*s)//判断循环队列是否已满
{
    if((s->rear+1)%MAXSIZE==s->front)
    return 1;
    else
        return 0;

}
int length_seqqueue(Seq_Queue*s)//求队列的长度
{
    if(s->front==s->rear)
        return 0;
    else
        return((s->rear-s->front+MAXSIZE)%MAXSIZE) ;
}
int enter_seqqueue(Seq_Queue*s,element x)//入队
{
    if(full_seqqueue(s))
        return 0;
    else
    {
        s->data[s->rear]=x;
        s->rear=(s->rear+1)%MAXSIZE;
          return 1;
    }
}
int pop_seqqueue(Seq_Queue*s,element *x)//出队
{
    if(empty_seqqueue(s))
        return 0;
    else
    {
        *x=s->data[s->front];
        s->front=(s->front+1)%MAXSIZE;
        return 1;
    }
}
Seq_Queue*creat_seqqueue()//循环队列的创建
{
    Seq_Queue*s;
    element x;
    int i=0;
    s=(Seq_Queue*)malloc(sizeof(Seq_Queue));
    if(s==NULL)
        return NULL;
      else
        {
            s->front=0;
            s->rear=0;
        }
        printf("请输入数据:\n");
         scanf("%d",&x);
         while(x!=0)
         {
             s->data[i++]=x;
             s->rear++;
             scanf("%d,&x");
            }
            return s;

}
int getdata_seqqueue(Seq_Queue*s,element *x)//取对头元素
{
    if(empty_seqqueue(s))
        return 0;
    else
       {
            *x=s->data[s->front];
            return  1;
       }


}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来回答你的问题。 首先,我们需要定义一个结构体来表示队列,如下所示: ```c #define MAXSIZE 10 // 队列的最大长度 typedef struct { int data[MAXSIZE]; // 存储队列元素的数组 int front; // 队头指针 int rear; // 队尾指针 } Queue; ``` 接下来,我们来看如何实现队列的建立、队中元素入队出队循环队列入队出队操作。 1. 队列的建立 队列的建立比较简单,只需要将队头指针和队尾指针初始化为0即可。 ```c void initQueue(Queue *q) { q->front = q->rear = 0; } ``` 2. 队中元素 从队列中元素时,我们需要判断队列是否为空。如果队列为空,则返回一个错误代码,否则返回队头指针所指向的元素。 ```c int getQueue(Queue *q) { if (q->front == q->rear) { printf("Queue is empty.\n"); return -1; } return q->data[q->front]; } ``` 3. 入队 往队列中添加元素时,我们需要判断队列是否已满。如果队列已满,则返回一个错误代码,否则将元素添加到队尾,并将队尾指针后移一位。 ```c void enQueue(Queue *q, int x) { if (q->rear == MAXSIZE) { printf("Queue is full.\n"); return; } q->data[q->rear++] = x; } ``` 4. 出队 从队列中删除元素时,我们需要判断队列是否为空。如果队列为空,则返回一个错误代码,否则将队头指针后移一位。 ```c void deQueue(Queue *q) { if (q->front == q->rear) { printf("Queue is empty.\n"); return; } q->front++; } ``` 5. 循环队列入队 循环队列是指队列的头尾相连,形成一个环形结构。循环队列入队操作比较特殊,需要将新元素添加到队尾,并将队尾指针后移一位。如果队尾指针已经到达数组的末尾,那么将队尾指针指向数组的开头。 ```c void enQueue_C(Queue *q, int x) { if ((q->rear + 1) % MAXSIZE == q->front) { printf("Queue is full.\n"); return; } q->data[q->rear] = x; q->rear = (q->rear + 1) % MAXSIZE; } ``` 6. 循环队列出队 循环队列出队操作和普通队列的出队操作类似,也需要判断队列是否为空。如果队列为空,则返回一个错误代码,否则将队头指针后移一位。如果队头指针已经到达数组的末尾,那么将队头指针指向数组的开头。 ```c void deQueue_C(Queue *q) { if (q->front == q->rear) { printf("Queue is empty.\n"); return; } q->front = (q->front + 1) % MAXSIZE; } ``` 以上就是关于C语言队列的建立、队中元素入队出队循环队列入队出队操作的简单介绍。希望能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值