栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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("有效数据个数:%dn",queue_size(&queue));
    for(int j = 0;j<2;j++)
    {
        if(!queue_empty(&queue))
        {
            printf("%d ",queue_pop(&queue));
        }
    }
    printf("有效数据个数:%dn",queue_size(&queue));
    for(int i = 60;i<=70;i+=10)
    {
        if(!queue_full(&queue))
        {
            queue_push(&queue,i);
        }
    }
    printf("有效数据个数:%dn",queue_size(&queue));
    for(int j = 0;j<2;j++)
    {
        if(!queue_empty(&queue))
        {
            printf("%d ",queue_pop(&queue));
        }
    }
    printf("有效数据个数:%dn",queue_size(&queue));
    while(!queue_empty(&queue))
    {
        printf("%d ",queue_pop(&queue));
    }
    printf("有效数据个数:%dn",queue_size(&queue));
    queue_deinit(&queue);
    return 0;
}
 

//定义头文件代码

#ifndef __QUEUE_H
#define __QUEUE_H
#include
#include

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)
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/913367.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号