/*构造一个空队列*/
Queue *InitQueue()
{
Queue *pqueue = (Queue *)malloc(sizeof(Queue));
if(pqueue!=NULL)
{
pqueue->front = NULL;
pqueue->rear = NULL;
pqueue->size = 0;
//pqueue->status=1; //初始化为send数据
}
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,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 EnQueue(Queue *pqueue,Item item,int sid)
{
int length = 0;
PNode pnode = (PNode)malloc(sizeof(Node));
if(pnode != NULL)
{
// 这里一定要+1
length = strlen(item)*sizeof(char)+1;
//pnode->data = item;
pnode->data = (Item)malloc(length);
memset(pnode->data, 0, length);
memcpy(pnode->data, item, length);
pnode->next = NULL;
pnode->status = sid;
if(IsEmpty(pqueue))
{
pqueue->front = pnode;
}
else
{
pqueue->rear->next = pnode;
}
pqueue->rear = pnode;
pqueue->size++;
}
return pnode;
}
/*队头元素出队*/
PNode DeQueue(Queue *pqueue,Item pitem,int *sid)
{
PNode pnode = pqueue->front;
if(IsEmpty(pqueue)!=1&&pnode!=NULL)
{
if(pitem!=NULL)
{
//*pitem = pnode->data;
memcpy(pitem, pnode->data, strlen(pnode->data));
free(pnode->data);
*sid = pnode->status;
}
pqueue->size--;
pqueue->front = pnode->next;
free(pnode);
if(pqueue->size==0)
pqueue->rear = NULL;
}
return pqueue->front;
}
/*遍历队列*/
void QueueTraverse(Queue* pqueue)
{
PNode pnode = pqueue->front;
int i = pqueue->size;
while(i--)
{
printf("遍历队列第 %d 个元素 为: %s\n", i, pnode->data);
pnode = pnode->next;
}
}
头文件
#ifndef Queue_H
#define Queue_H
typedef char* Item;
typedef struct node * PNode;
typedef struct node
{
Item data;
PNode next;
int status; //status=1 表明是send 数据,=2为recv数据
}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 EnQueue(Queue *pqueue,Item item,int sid);
/*队头元素出队*/
PNode DeQueue(Queue *pqueue,Item pitem,int *sid);
/*遍历队列,并对各项数据调用visit函数*/
void QueueTraverse(Queue* pqueue);
#endif