队列的简单封装

/************************************************
*文件名: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");
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值