队列的定义
先进先出,后进后出,如何去理解呢?就好比我们去食堂排队打饭,我们排队就是一个队列,先去排的先打饭,后去的后打饭,这就是队列。下面是用尾部插入的方式实现队列
队列的结构体定义:
typedef struct Queue
{
int data;//存放数据
struct Queue *next;
}Queue,* LinkQueue;
初始化队列
Queue *InitQueue()
{
Queue *queue = (Queue *)malloc(sizeof(Queue));
if(queue == NULL)
{
printf("create fail \n");
return 0;
}
queue->next = NULL;
return queue;
}
入队
void EnQueue(Queue *queue , int data)
{
Queue *tmp = (Queue *)malloc(sizeof(Queue));
while(queue->next != NULL)
{
queue = queue->next;//移动到尾部
}
tmp->data = data ;
queue->next = tmp;//尾部插入
tmp->next = NULL;
}
出队
void DeQueue(Queue *queue,int *data)
{
if(queue->next != NULL)
{
*data = queue->next->data;
queue->next = queue->next->next;//删除一个节点
}
}
打印整个链表
void printfall(Queue *queue)
{
while(queue->next != NULL)
{
printf("all %d\n",queue->next->data);
queue = queue->next ;
}
}
整个程序
#include<stdio.h>
#include<stdlib.h>
typedef struct Queue
{
int data;
struct Queue *next;
}Queue,* LinkQueue;
Queue *InitQueue()
{
Queue *queue = (Queue *)malloc(sizeof(Queue));
if(queue == NULL)
{
printf("create fail \n");
return 0;
}
queue->next = NULL;
return queue;
}
void EnQueue(Queue *queue , int data)
{
Queue *tmp = (Queue *)malloc(sizeof(Queue));
while(queue->next != NULL)
{
queue = queue->next;
}
tmp->data = data ;
queue->next = tmp;
tmp->next = NULL;
}
void DeQueue(Queue *queue,int *data)
{
if(queue->next != NULL)
{
*data = queue->next->data;
queue->next = queue->next->next;
}
}
void printfall(Queue *queue)
{
while(queue->next != NULL)
{
printf("all %d\n",queue->next->data);
queue = queue->next ;
}
}
int main()
{
int i ,data;
Queue *que = InitQueue();
for(i=0; i < 10 ; i++)
{
EnQueue(que,i);
printf("enqueue data is %d\n",i);
}
printf("\n");
for(i = 0;i<10;i++)
{
DeQueue(que,&data);
printf("dequeue data is %d\n",data);
}
return 0;
}
运行结果