*文件名:queue.h
*创建者:ycj
*创建时间:2015-3-16
*文件说明:声明队列:入队,出队,打印,获取头部
*************************************************/
#ifndef QUEUE_H
#define QUEUE_H
#include <stdio.h>
#include <stdlib.h>
#define N 100 //定义队列最大多少个
#define datatype char //定义队列的数据类型
struct queue
{
datatype data[N];//保存数据的数组
int front;//数据的头部
int rear;//数据的尾部
};
typedef struct queue Q;//给已经有的类型名称简化
void init(Q * myqueue);//初始化队列
int isempty(Q * myqueue);//判断是否为空,1代表为空,0代表不为空
void Enqueue(Q * myqueue, datatype num);//入队
datatype Dequeue(Q * myqueue);//出队
void pinrtfQ(Q * myqueue);//打印队列所有的元素
datatype gethead(Q * myqueue);//获取数据头部
#endif
/************************************************
*文件名:queue.c
*创建者:ycj
*创建时间:2015-3-16
*文件说明:实现函数:入队,出队,打印,获取头部数据
*************************************************/
#include "queue.h"
void init(Q * myqueue)//初始化队列
{
myqueue->front = myqueue->rear = 0;//表示为空
}
int isempty(Q * myqueue)//判断为空
{
if (myqueue->front == myqueue->rear)
{
return 1;
}
else
{
return 0;
}
}
void Enqueue(Q * myqueue, datatype num)//入队
{
if (myqueue->rear == N)
{
printf("\n入列失败");
return;//失败
}
else
{
myqueue->data[myqueue->rear] = num;//尾部指向的单元赋值
myqueue->rear += 1;//尾部右移一位,指向下个单元
}
}
datatype Dequeue(Q * myqueue)//出队
{
if (myqueue->front == myqueue->rear)
{
printf("\n出列失败");
return -1;
}
else
{
myqueue->front += 1;//头部右移一位
return myqueue->data[myqueue->front - 1];//返回头部原来的数据
}
}
void pinrtfQ(Q * myqueue)//打印队列所有的元素
{
printf("\n");
if (myqueue->front == myqueue->rear)
{
printf("\n没有数据,打印失败");
return;
}
else
{
for (int i = myqueue->front; i < myqueue->rear; i++)
{
printf("%c ", myqueue->data[i]);//循环打印所有数据
}
}
}
/************************************************
*文件名:test.c
*创建者:ycj
*创建时间:2015-3-16
*文件说明:测试库文件
*************************************************/
#include "queue.h"
#pragma comment(lib, "queue.lib")
void main()
{
Q Q1;//创建一个结构体变量
char str;
init(&Q1);
Enqueue(&Q1, 'A');//A入队
pinrtfQ(&Q1);//打印队列所有的元素
Enqueue(&Q1, 'B');//B入队
pinrtfQ(&Q1);
Enqueue(&Q1, 'C');//C入队
pinrtfQ(&Q1);
Enqueue(&Q1, 'D');//D入队
pinrtfQ(&Q1);
Dequeue(&Q1);//A出队
pinrtfQ(&Q1);
str = gethead(&Q1);//获取开头的一个结点
printf("getchead = %c", str);//输出
Dequeue(&Q1);//B出队
pinrtfQ(&Q1);
Dequeue(&Q1);//C出队
pinrtfQ(&Q1);
str = gethead(&Q1);//获取开头的一个结点
printf("getchead = %c", str);//输出
Dequeue(&Q1);//D出队
pinrtfQ(&Q1);//打印队列所有的元素
Dequeue(&Q1);//出队
pinrtfQ(&Q1);//打印队列所有的元素
system("pause");
}