数据结构-链式队列

版权声明:转载请注明出处 https://blog.csdn.net/qq_37689106/article/details/82950983
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct node
{
    int data;
    struct node *next;
}linklist_t;
typedef struct __queue__
{
    struct node *front;
    struct node *rear;
}linkqueue_t;
//**************************************************************
linkqueue_t * creat_linkqueue(void)  //创建空的链队列 和链表  并将队列的指针指向指向链表的头
{
    linkqueue_t * q = (linkqueue_t *)malloc(sizeof(linkqueue_t));
    linklist_t  * l = (linklist_t * )malloc(sizeof(linklist_t));
    l->data = 0;
    l->next = NULL;
    q->front = q->rear =l;
    return q;
}


//**************************************************************
int queue_is_empty(linkqueue_t *q)
{
    return (q->front == q->rear  )?1:0;
}

//**************************************************************

void en_queue(linkqueue_t *q,int val)  //入队
{
    linklist_t *l = (linklist_t *)malloc(sizeof(linklist_t));
    l->data = val;
    l->next = q->rear->next;
    q->rear->next = l;
    q->rear = l;
}
//**************************************************************
void de_queue(linkqueue_t *q,int *val) //出队
{
    if (queue_is_empty(q))
    {
        printf("queue_is_empty\n");
    }
    else
    {
        linklist_t *t =  q->front->next;
        *val = t->data;
        q->front->next = t->next;
        if (t->next == NULL)
            q->rear = q->front;
        free(t);
    }
}

int main()
{
    linkqueue_t *Q = creat_linkqueue();
    int val,i;
    for(i=1;i<=10;i++)
    {
        en_queue(Q,i);
    }
    for(i=1;i<=10;i++)
    {
        de_queue(Q,&val);
        printf("%-3d",val);
    }
    printf("\n");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37689106/article/details/82950983