#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;
}
数据结构之顺序队列
最新推荐文章于 2020-04-10 23:46:55 发布