LINUX多文件实现队列(C语言)附带Make file

//主函数测试代码

#include"queue.h"

int main(void)
{
    queue_t queue;
    queue_init(&queue,4);
    for(int i = 10;i<=40;i+=10)
    {
        if(!queue_full(&queue))
        {
            queue_push(&queue,i);
        }
    }
    printf("有效数据个数:%d\n",queue_size(&queue));
    for(int j = 0;j<2;j++)
    {
        if(!queue_empty(&queue))
        {
            printf("%d ",queue_pop(&queue));
        }
    }
    printf("有效数据个数:%d\n",queue_size(&queue));
    for(int i = 60;i<=70;i+=10)
    {
        if(!queue_full(&queue))
        {
            queue_push(&queue,i);
        }
    }
    printf("有效数据个数:%d\n",queue_size(&queue));
    for(int j = 0;j<2;j++)
    {
        if(!queue_empty(&queue))
        {
            printf("%d ",queue_pop(&queue));
        }
    }
    printf("有效数据个数:%d\n",queue_size(&queue));
    while(!queue_empty(&queue))
    {
        printf("%d ",queue_pop(&queue));
    }
    printf("有效数据个数:%d\n",queue_size(&queue));
    queue_deinit(&queue);
    return 0;
}
 

//定义头文件代码

#ifndef __QUEUE_H
#define __QUEUE_H
#include<stdio.h>
#include<stdlib.h>

typedef struct queue
{
    int *arr;//队列首地址
    int rear;//队尾
    int front;//队首
    int size;//有效数据个数
    int cap;//容量
}queue_t;

//初始化队列
extern void queue_init(queue_t *queue,int cap);
//释放队列内存
extern void queue_deinit(queue_t *queue);
//判断队是否满
extern int queue_full(queue_t *queue);
//判断对视否空
extern int queue_empty(queue_t *queue);
//返回有效数据个数
extern int queue_size(queue_t *queue);
//入队
extern void queue_push(queue_t *queue,int data);
//出队
extern int queue_pop(queue_t *queue);
#endif

//函数实现代码

#include"queue.h"
//初始化队列
void queue_init(queue_t *queue,int cap)
{
    queue->arr = (int *)malloc(sizeof(int)*cap);
    queue->rear = 0;
    queue->front = 0;
    queue->size = 0;
    queue->cap = cap;
}
//释放队列内存
void queue_deinit(queue_t *queue)
{
    free(queue->arr);
    queue->rear = 0;
    queue->size = 0;
    queue->cap = 0;
    queue->front = 0;
}
//判断队是否满
int queue_full(queue_t *queue)
{
    return queue->size >= queue->cap;//满返回1
}
//判断对视否空
int queue_empty(queue_t *queue)
{
    return !queue->size;//空返回1
}
//返回有效数据个数
int queue_size(queue_t *queue)
{
    return queue->size;
}
//入队
void queue_push(queue_t *queue,int data)
{
    if(queue->rear >= queue->cap)
    {
        queue->rear = 0;
    }
    queue->arr[queue->rear++] = data;
    queue->size++;//计数
}
//出队
int queue_pop(queue_t *queue)
{
    if(queue->front >= queue->cap)
    {
        queue->front = 0;
    }
    queue->size--;
    return queue->arr[queue->front++];
}
 

Make file文件内容:注意回车和tab

BIN=queue
OBJ=main.o queue.o
CC=gcc

$(BIN):$(OBJ)
    $(CC) -o $(BIN) $(OBJ)

%.o:%.c
    $(CC) -c -o $@ $<

clean:
    rm $(BIN) $(OBJ)
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值