数据结构之顺序队列

版权声明:转载请注明出处 https://blog.csdn.net/qq_37689106/article/details/82950964
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define N 32

typedef struct __queue__
{
    int data[N];
    int front,rear;
}sequeue_t;

sequeue_t * creat_empty_sequeue(void)  //创建空的顺序队列 
{
    sequeue_t * sq = (sequeue_t *)malloc(sizeof(sequeue_t));
    memset(sq->data,0,N);
    sq->front = sq->rear =0;
    return sq;
}

int squeue_is_empty(sequeue_t *s) //如果两个值相等 则为空队列
{
    return (s->front == s->rear)?1:0;
}

int squeue_is_full(sequeue_t *s)  //如果两个值的绝对值等于队列的长度 则说明满队
{
    return ((abs(s->rear - s->front))==(N-1))?1:0;
}

int ensqueue(sequeue_t *s,int val) //入队 rear 的值后移
{
    if (squeue_is_full(s))
    {
        printf("squeue_is_full\n");
        return -1;
    }
    else
    {
    s->rear = s->rear%(N-1);  //保证不会溢出  如果超过队的长度 就将前面的覆盖掉
    s->data[s->rear] = val;
    s->rear ++;
    }
    return 0;
}

int outsqueue(sequeue_t *s,int *val)  //出队
{
    if (squeue_is_empty(s))
    {
        printf("squeue_is_empty\n");
        return -1;
    }
    else
    {
        s->front = s->front%(N-1); //同上
        *val = s->data[s->front];
        s->front ++;
    }
    return 0;
}



 main()
{
    sequeue_t *S1 = creat_empty_sequeue();
  //sequeue_t *S2 = creat_empty_sequeue();
    int i,val;
    for(i=1;i<=20;i++)
    {
        ensqueue(S1,i);
    }
    for(i=1;i<=20;i++)
    {
        outsqueue(S1,&val);
        printf("%-3d",val);
    }
    printf("\n");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37689106/article/details/82950964
今日推荐