数据结构之顺序队列

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值