数据结构--7顺序队列程序

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

#define  SIZE  10
typedef int data_t;

//构造顺序队列类型
typedef struct squeue{
    data_t data[SIZE];//顺序队列
    int front;//保存队头元素的下标
    int rear;//保存队尾元素的下一个位置的下标
}squeue;

//创建顺序队列
squeue *createSqueue()
{
    squeue *sq = (squeue *)malloc(sizeof(squeue));
    if(NULL == sq)
        return NULL;
    memset(sq->data, 0, sizeof(sq->data));
    sq->front = sq->rear = 0;//说明队列为空
    
    return sq;
}

//判空
int squeue_is_empty(squeue *sq)
{
    if(NULL == sq)
        return -1;
    else
        return ((sq->front == sq->rear)?1:0);
}

//判满
int squeue_is_full(squeue *sq)
{    
    if(NULL == sq)
        return -1;
    if(sq->rear > sq->front)
        return((sq->rear-sq->front == SIZE-1)?1:0);
    if(sq->rear < sq->front)
        return ((sq->front-sq->rear == 1)?1:0);
}

//求队列中元素个数
int getLengthSqueue(squeue *sq)
{
    if(NULL == sq)
        return -1;
    int num = 0;
    int temp = sq->front;
    while(temp != sq->rear)
    {
        num++;
        temp = (temp+1)%SIZE;    //0 ~ SIZE-1
    }

    return num;
}

//入队
int enSqueue(squeue *sq, data_t data)
{
    if(NULL == sq)
        return -1;
    //判满
    if(squeue_is_full(sq))
        return -1;
    sq->data[sq->rear] = data;//在队尾添加元素 data
    sq->rear = (sq->rear+1) % SIZE;//让rear变量指向队尾元素的下一个位置
    
    return 0;
}

//出队
data_t deSqueue(squeue *sq)
{
    if(NULL == sq)
        return -1;
    if(squeue_is_empty(sq))
        return -1;
    data_t data = sq->data[sq->front];//data变量保存队头元素
    sq->front = (sq->front+1) % SIZE;
    
    return data;
}


//打印队列中各个元素的值
void printSqueue(squeue *sq)
{
    if(NULL == sq)
        return ;
    int temp = sq->front;
    while(temp != sq->rear)
    {
        printf("%d ",sq->data[temp]);
        temp = (temp+1)%SIZE;
    }
    printf("\n");
    return ;
}



int main()
{
    squeue *sq = createSqueue();
    if(NULL == sq)
    {
        printf("malloc failed\n");
        return -1;
    }

    int i = 0;
    while(i<10)
    {
        enSqueue(sq, i+1);
        i++;
    }
    printSqueue(sq);
    
    i = 0;
    while(i<5)
    {
        data_t data = deSqueue(sq);
        printf("%d ",data);
        i++;
    }
    printf("\n");
    printSqueue(sq);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值