C语言学习之行列操作
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; }