queue的使用
来源:互联网 发布:php mysqli connect 编辑:程序博客网 时间:2024/06/06 04:04
//////////queue.h/////////
#ifndef Queue_H
#define Queue_H
typedef unsigned char Item;
typedef struct node * PNode;
typedef struct node
{
Item data;
PNode next;
}Node;
typedef struct
{
PNode front;//前一个元素
PNode rear;//后一个元素
int size;
}Queue;
/*构造一个空队列*/
Queue *InitQueue();
/*销毁一个队列*/
void DestroyQueue(Queue *pqueue);
/*清空一个队列*/
void ClearQueue(Queue *pqueue);
/*判断队列是否为空*/
int IsEmpty(Queue *pqueue);
/*返回队列大小*/
int GetSize(Queue *pqueue);
/*返回队头元素*/
PNode GetFront(Queue *pqueue,Item *pitem);
/*返回队尾元素*/
PNode GetRear(Queue *pqueue,Item *pitem);
/*将新元素入队*/
PNode EnQueue(Queue *pqueue,Item item);
/*队头元素出队*/
PNode DeQueue(Queue *pqueue,Item *pitem);
/*遍历队列并对各数据项调用visit函数*/
void QueueTraverse(Queue *pqueue);
#endif
///////////////queue.cpp////////////////////////////
#include "stdafx.h"
#include"queue.h"
#include<malloc.h>
#include<stdio.h>
/*构造一个空队列*/
Queue *InitQueue()
{
Queue *pqueue = (Queue *)malloc(sizeof(Queue));
if(pqueue!=NULL)
{
pqueue->front = NULL;
pqueue->rear = NULL;
pqueue->size = 0;
}
return pqueue;
}
/*销毁一个队列*/
void DestroyQueue(Queue *pqueue)
{
if(IsEmpty(pqueue)!=1)
ClearQueue(pqueue);
free(pqueue);
}
/*清空一个队列*/
void ClearQueue(Queue *pqueue)
{
while(IsEmpty(pqueue)!=1)
{
DeQueue(pqueue,NULL);
}
}
/*判断队列是否为空*/
int IsEmpty(Queue *pqueue)
{
if(pqueue->front==NULL&&pqueue->rear==NULL&&pqueue->size==0)
return 1;
else
return 0;
}
/*返回队列大小*/
int GetSize(Queue *pqueue)
{
return pqueue->size;
}
/*返回队头元素*/
PNode GetFront(Queue *pqueue,Item *pitem)
{
if(IsEmpty(pqueue)!=1&&pitem!=NULL)
{
*pitem = pqueue->front->data;
}
return pqueue->front;
}
/*返回队尾元素*/
PNode GetRear(Queue *pqueue,Item *pitem)
{
if(IsEmpty(pqueue)!=1&&pitem!=NULL)
{
*pitem = pqueue->rear->data;
}
return pqueue->rear;
}
/*将新元素入队*/
PNode EnQueue(Queue *pqueue,Item item)
{
PNode pnode = (PNode)malloc(sizeof(Node));
if(pnode != NULL)
{
pnode->data = item;
pnode->next = NULL;
if(IsEmpty(pqueue))
{
pqueue->front = pnode;
}
else
{
pqueue->rear->next = pnode;
}
pqueue->rear = pnode;
pqueue->size++;
}
return pnode;
}
/*队头元素出队*/
PNode DeQueue(Queue *pqueue,Item *pitem)
{
PNode pnode = pqueue->front;
if(IsEmpty(pqueue)!=1&&pnode!=NULL)
{
if(pitem!=NULL)
*pitem = pnode->data;
pqueue->size--;
pqueue->front = pnode->next;
free(pnode);
if(pqueue->size==0)
pqueue->rear = NULL;
}
return pqueue->front;
}
/*遍历队列并对各数据项调用visit函数*/
void QueueTraverse(Queue *pqueue)
{
PNode pnode = pqueue->front;
int i = pqueue->size;
while(i--)
{
printf("%02x ",pnode->data);
pnode = pnode->next;
}
}
///////////////////test.cpp/////////////////////
#include "stdafx.h"
#include <stdio.h>
#include <winsock2.h>
#include"queue.h"
#include <conio.h>
#include<stdio.h>
void print(Item i)
{
printf("该节点元素为%d\n",i);
}
void main(void)
{
Queue *pq = InitQueue();
unsigned char i;
unsigned char item;
unsigned char ch;
printf("0-9 input:\n");
for(i=0;i<10;i++)
{
EnQueue(pq,(unsigned char)i);
GetRear(pq,&item);//Rear 后部
printf("%02x \n",item);
}
while(1)
{
ch = getchar();
DeQueue(pq,&item);
printf("\n出去:%02x \n",item);
EnQueue(pq,ch);
printf("\n进来:%02x \n",ch);
printf("\nqueue display:\n");
PNode pnode = pq->front;
printf("second:%02x",pnode->next->data);
//QueueTraverse(pq);
}
ClearQueue(pq);
if(IsEmpty(pq))
printf("\n queue is null\n");
DestroyQueue(pq);
printf("queue is destroy\n");
}
0 0
- STL queue 的使用
- java Queue的使用
- 本地queue的使用
- Queue 的使用
- queue的使用
- #include <queue> 的使用
- queue的使用
- Queue的使用
- STL queue的使用
- Python Queue的使用
- C# Queue的使用
- UVA 540 Team Queue(queue的使用)
- 系统中queue的使用
- java中queue的使用
- Queue和LinkedList的使用
- java中queue的使用
- STL中queue的使用
- Java中Queue的使用
- shell工程代码行数统计
- ios开发必备10款第三方类库
- 2.2.4RemoveDuplicatesfromSortedList
- 视图动画和帧动画
- 图像压缩(SVD方法)
- queue的使用
- Android 2D Graphics的绘制
- c#怎么实现chart柱状图的不同颜色
- POJ 1276 Time Machine【多重背包】
- Python实现多叉树【转自百度知道】
- 一些iOS常用的第三方库和控件
- ADO.NET 从DataTable中获取某列含有的不重复值的几种方式
- 杭电 - Heritage from father
- 各种类型转换 C++