一、概述
队列是数据结构中最常用的一种算法,核心是FFO(First In First Out),即先进先出,顶部出队列,底部入队列。
二、操作
三、代码
头文件
#include <stdio.h>
#include <stdlib.h>
/**
队列的核心思想是FIFO(First In First Out),即先入先出
通过单链表形式实现队列的功能
**/
#define SUCCESS 0
#define FAIL -1
//队列的数据结构
typedef struct QueueNode *pQueueNode;
typedef int DataType;//队列中的数据类型
typedef struct QueueNode{
DataType *data;
pQueueNode next;
}sQueuekNode;
typedef struct Queue{
pQueueNode front,rear;
int dataNum;
}sQueue;
void InitQueue();
int Push(const DataType data);
int Pop(DataType *data);
void Clear();
int Size();
void Print();
源文件
#include "queue.h"
#include <string.h>
static sQueue gQueue;
static void DataCopy(DataType *newData, const DataType *oldData){
memcpy(newData,oldData,sizeof(DataType));
}
void InitQueue(){
gQueue.front = NULL;
gQueue.rear = gQueue.front;
gQueue.dataNum = 0;
}
int Push(const DataType data){
pQueueNode node = (pQueueNode)malloc(sizeof(sQueuekNode));
node->data = (DataType *)malloc(sizeof(DataType));
DataCopy(node->data,&data);
node->next = NULL;
if(NULL == gQueue.front)
{
gQueue.front = node;
gQueue.rear = gQueue.front;
}
else
{
gQueue.rear->next = node;
gQueue.rear = node;
}
gQueue.dataNum++;
}
int Pop(DataType *data){
if(NULL == data || NULL == gQueue.front)
{
return FAIL;
}
DataCopy(data,gQueue.front->data);
pQueueNode node = gQueue.front;
gQueue.front = gQueue.front->next;
free(node->data);
free(node);
gQueue.dataNum--;
return SUCCESS;
}
void Clear(){
pQueueNode node = NULL;
while(gQueue.front)
{
node = gQueue.front;
gQueue.front = gQueue.front->next;
free(node->data);
free(node);
}
InitQueue();
}
int Size(){
return gQueue.dataNum;
}
void Print(){
pQueueNode node = gQueue.front;
printf("size:%d\n",gQueue.dataNum);
while(node)
{
printf("%d ",*node->data);
node = node->next;
}
printf("\n");
}
测试代码
#include <stdio.h>
#include <stdlib.h>
#include "queue.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
InitQueue();
Push(1);
Push(2);
Push(3);
Print();
int a;
Pop(&a);
Print();
Pop(&a);
Print();
Pop(&a);
Print();
return 0;
}
测试结果