C语言学习之队列操作
2015-02-09 08:36
218 查看
本文件为队列操作的接口:
/*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.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;
}
相关文章推荐
- C语言数据结构中队列的相关操作
- C语言队列的实现--学习组合设计(一)
- 学习笔记---线性表的基本操作---顺序存储(C语言)
- 顺序队列(循环队列)基本操作实现 C语言
- 数据结构之顺序队列的操作(C语言)
- 学习C语言对文件的操作函数
- c语言实现队列结构操作的宏定义
- C语言小算法_2_静态队列操作
- C语言 单链队列操作
- C语言学习之文件操作(含重庆大学研究生程序设计大赛的题目和解答)
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- 文件操作03 - 零基础入门学习C语言62
- 文件操作02 - 零基础入门学习C语言61
- 数据结构之顺序队列的操作(C语言)
- 数据结构与算法学习之队列及队列的相关操作
- Linux下C语言学习笔记—操作MySQL
- 文件操作02 - 零基础入门学习C语言61
- 文件操作04 - 零基础入门学习C语言63
- [C语言]队列基本操作
- (10.15)[转]C++学习(队列操作,入队,出队)