C语言学习之队列操作

本文件为队列操作的接口:

/*queue.h*/

#ifndef _SEQQUEUE_H_

#define _SEQQUEUE_H_

#define QUEUE_MAX    15

typedef struct

{

int number;   //顾客编号

long time;//进入时间

}DATATYPE_T;

typedef struct

{

DATATYPE_T  data[QUEUE_MAX];  //队列数组

int head;                     //队列头

int tail;                     //队列尾

}SEQQUEUE;

/*队列是否为空*/

int queue_empty(SEQQUEUE *queue);

/*队列是否满*/

int queue_full(SEQQUEUE *queue);

/*队列初始化*/

SEQQUEUE *queue_init();

/*进队列*/

int queue_push(SEQQUEUE *queue,DATATYPE_T  data);

/*出队列*/

DATATYPE_T *queue_pop(SEQQUEUE *queue);

/* 获取队列的第一个元素*/

DATATYPE_T *get_queue_first_element(SEQQUEUE *queue);

/*获取队列的长度*/

int get_queue_length(SEQQUEUE *queue);

/*释放队列*/

void queue_free(SEQQUEUE *queue);

/*显示队列信息*/

int show_queue_info(SEQQUEUE *queue);

#endif

/*queue.c*/

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include "seqQueue.h"

/*队列是否为空*/

int queue_empty(SEQQUEUE *queue)

{

return (queue->head==queue->tail);

}

/*队列是否满*/

int queue_full(SEQQUEUE *queue)

{

return (queue->tail==QUEUE_MAX);

}

/*队列初始化*/

SEQQUEUE *queue_init()

{

SEQQUEUE *queue=NULL;

queue = malloc(sizeof(SEQQUEUE));

if(queue == NULL)

{

printf("malloc failed\n");

return NULL;

}

queue->head = 0;

queue->tail = 0;

return queue;

}

/*进队列*/

int queue_push(SEQQUEUE *queue,DATATYPE_T  data)

{

int ret = 0;

ret = queue_full(queue);

if(ret!=0)

{

printf("the queue is full\n");

return -1;

}

queue->tail++;

queue->data[queue->tail] = data;

return 0;

}

/*出队列*/

DATATYPE_T *queue_pop(SEQQUEUE *queue)

{

int ret = 0;

ret = queue_empty(queue);

if(ret!=0)

{

printf("the queue is empty\n");

return NULL;

}

queue->head++;

return &(queue->data[queue->head]);

}

/* 获取队列的第一个元素*/

DATATYPE_T *get_queue_first_element(SEQQUEUE *queue)

{

int ret = 0;

ret = queue_empty(queue);

if(ret!=0)

{

printf("the queue is empty\n");

return NULL;

}

return &(queue->data[queue->head]);

}

/*获取队列的长度*/

int get_queue_length(SEQQUEUE *queue)

{

return ((queue->tail)-(queue->head));

}

/*释放队列*/

void queue_free(SEQQUEUE *queue)

{

if(queue!=NULL)

{

free(queue);

queue = NULL;

}

}

/*显示队列全部信息 */

int show_queue_info(SEQQUEUE *queue)

{

int i = 0;

for(i=queue->head+1;i<(queue->tail+1);i++)

{

printf("num:%d,time:%d\n",queue->data[i].number,queue->data[i].time);

}

return 0;

}

/*queue.c*/



时间: 2024-10-12 12:59:23

C语言学习之队列操作的相关文章

JavaSE中Collection集合框架学习笔记(2)——拒绝重复内容的Set和支持队列操作的Queue

前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难.不管了,工作三年之后就当给自己放个暑假. 面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的文章,大多都是以罗列记忆点的形式书写的,没有谈论实现细节和逻辑原理.作为个人笔记无可厚非,但是并不利于他人学习.希望能通过这种比较“费劲”的讲解,帮助我自己.也帮助读者们更好地学习Java.掌握Java. 无论你跟我一样需要应聘,还是说在校学生学习Java基础,都对入门和进一步启发学习有所帮助.(关

C语言学习之用队列实现银行排队系统

队列操作的接口:http://blog.csdn.net/qlx846852708/article/details/43666927 数据结构C语言实现:http://blog.csdn.net/qlx846852708?viewmode=contents 本文件是用队列实现银行排队系统,上面的连接是我实现的队列的接口实现. #include <stdio.h> #include <stdlib.h> #include <string.h> #include "

Perl语言学习笔记 13 目标操作

1.改变目录 chdir "/etc" or die "can't chdir to '/etc'!\n"; 省略参数会回到用户主目录,与cd效果一样: 2.文件名通配 my @all_files = glob "*"; #不包括以点号开头的文件 my @pm_files = glob "*.pm"; 一次匹配多种模式,用空格隔开:my @files = ".* *"; #可以匹配所有的文件,包括以点号开头

go语言学习笔记

go语言学习笔记 go语言学习笔记(初级) 最近一直在学习go语言,因此打算学习的时候能够记录 一下笔记.我这个人之前是从来没有记录笔记的习惯, 一直以来都是靠强大的记忆力去把一些要点记住. 读书的时候因为一直都是有一个很安静和很专心的环境, 因此很多事情都能记得很清楚,思考的很透彻.但是随着 年纪不断增加,也算是经历了很多的事情,加上工作有时会让人 特别烦闷,很难把心好好静下来去学习,去思考大自然的终极 奥秘,因此需要记录一些东西,这些东西一方面可以作为一种自我激励 的机制,另一方面,也算是自

LabVIEW之生产者/消费者模式--队列操作 彭会锋

LabVIEW之生产者/消费者模式--队列操作 彭会锋 本文章主要是对学习LabVIEW之生产者/消费者模式的学习笔记,其中涉及到同步控制技术-队列.事件.状态机.生产者-消费者模式,这几种技术在在本章中都会有侧重点的进行介绍和总结! 队列同步技术-操作函数 同步控制技术可以实现在多个VI之间或者同一VI 不同县城之间同步任务和交换数据:在LabVIEW中提供了‘同步’函数选板,包括通知器.队列.信号量.集合点.事件.首次调用函数,本文主要关注同步控制技术之队列技术: 队列操作函数: 1 “获取

C语言学习书籍推荐《C Primer Plus(中文版)(第5版)》下载

普拉塔 (Prata S.) (作者), 云巅工作室 (译者) <C Primer Plus(中文版)(第5版)>共17章,介绍了C语言的基础知识,包括数据类型.格式化输入输出.运算符.表达式.流程控制语句.函数.数组和指针.字符串操作.内存管理.位操作等,知识内容都针对C99标准:另外,<C Primer Plus(中文版)(第5版)>强化了对指针的讨论,并引入了动态内存分配的概念,也讨论了C预处理器和C库函数.高级数据表示(数据结构)方面的内容. 下载地址:点我 编辑推荐 作为

C语言学习必须拥有学习路线,不然你就只会写贪吃蛇

C语言学习必须拥有学习路线,不然你就只会写贪吃蛇这些天一直有人问我,c语言好学吗?我是个新手,该如何学习? 其实,这类问题困扰着很多新手.在如何学习之前,我们想简单的了解一下什么是C语言: C语言是一种计算机程序设计语言.它既有高级语言的特点,又具有汇编语言的特点.它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序.创一个小群,供大家学习交流聊天如果有对学C++方面有什么疑惑问题的,或者有什么想说的想聊的大家可以一起交流学习一起进步呀.也希望

系统学习消息队列分享(一) 怎样系统学习消息队列?

从系统之间有通信需求开始呢,就产生了消息队列,它也是最古老的中间件之一.它的应用场景非常广泛,分布式系统中的很多进程间通信问题,都可以用消息队列来解决.可以说消息队列是所有后端程序员的必备技能.但是,想要系统.深入地学习消息队列,却并不容易. 要了解消息队列的完整知识体系,想深度进阶为消息队列达人,从理论到实践,从基础到进阶,从深度到广度,全方位吃透消息队列. 哪些人适合学消息队列? 后端开发者:消息队列几乎是每个后端程序员都会用到的中间件,无论你是开发微服务,实时计算,还是机器学习程序,都需要

Android通过JNI实现与C语言的串口通讯操作蓝牙硬件模块

一直想写一份技术文档,但因为自感能力有限而无从下笔,近期做了个关于Android平台下实现与C语言的通讯来操作蓝牙模块的项目,中间碰到了很多问题,也在网上查了很多资料,在完毕主要功能后.也有一些人在网上问我一些问题.这里写下这篇文档算是一个阶段性的总结. 假设反响好.兴许将会发上Android Stub与新版Android HAL的学习文档. 因为蓝牙模块是串口通讯机制.使用C语言来訪问,而Android的应用层採用Java.无法直接操作硬件.故使用JNI的技术实现主要功能.Android的JN