之前实现的链表队列未采用头指针和尾指针,在每次插入队列时都遍历到队列的尾部然后插入元素,然后在出队时采用头出法实现的,本篇用于记录包含了头指针和尾指针的链表队列的代码实现。队列的结构体与之前相同,没有变化,如下:
一、结构体定义
typedef int data_t;
typedef struct queue
{
data_t data;
struct queue* next;
}Queue,*Queue_p;
头指针和尾指针不包含在队列的结构体中,单独存放在一个新的结构体中。
typedef struct point
{
Queue_p head;
Queue_p tail;
}Point,*Point_p;
二、链表创建
与之前的链表创建不同,在返回值上有区别,上次的链表创建函数的返回值类型是队列的结构体,而本次的创建函数的返回值类型是包含头指针、尾指针的结构体。具体实现如下:
Point_p create_queue() //注意创建函数的返回值类型
{
Queue_p queue=(Queue_p)malloc(sizeof(Queue)); //为队列开辟空间
if(NULL==queue)
{
printf("create queue error!\n");
return NULL;
}
queue->next=NULL; //空队列
Point_p point=(Point_p)malloc(sizeof(Point)); //为指针结构体开辟空间
if(NULL==point)
{
printf("create point err