【数据结构】-链式队列(接上)

一、队列的链式存储结构

        队列的链式存储也称链式队列,是一个特殊的链表;其中链表的头部结点链式队列的队头实现数据的删除和查看,也是出队端;链表的尾部结点实现数据的插入,也是入队端。

二、链表结构

//构建数据域类型
typedef int data_t;
//链式结点类型
typedef struct node{
    data_t data;//结点数据域
    struct node *next;//结点指针域
}node_t;
//链式队列结构体
typedef struct linkqueue{
    node_t *front; //队头结点指针
    node_t *rear; //队尾结点指针
}linkqueue_t;

三、链表操作函数实现

//初始化链队列
linkqueue_t *CreateLinkQueue()
{
    linkqueue_t *queue;
    queue = malloc(sizeof(linkqueue_t));
    if(queue == NULL)
        return NULL;
    queue->front = malloc(sizeof(node_t));
    if(queue->front == NULL)
    {
        free(queue);
        return NULL;
    }
    queue->rear = queue->front;

    return queue;
}
//入队
int EnLinkQueue(linkqueue_t *queue,data_t mydata)
{
    node_t *p;
    if(queue == NULL)
    return -1;

    //创建入队结点并初始化
    p = malloc(sizeof(node_t));
    if(p == NULL)
        return -1;
    p->data = mydata;
    //入队
    p->next = NULL;
    queue->rear->next = p;
    queue->rear = p;

    return 0;
}
//获取队头元素
int GetLinkQueue(linkqueue_t *queue,data_t *mydata)
{
    //判断队列是否有
    if(queue == NULL)
        return -1;
    //队列中是否有元素
    if(queue->front->next == NULL)
        return -1;
    
    *mydata = queue->front->next->data;

    return 0;
}
//出队
int DeLinkQueue(linkqueue_t *queue)
{
    node_t *p;
    if(queue == NULL)
        return -1;
    if(queue->front->next == NULL)
        return -1;
    //出队
    p = queue->front->next;
    queue->front->next = p->next;
    free(p);
    //若出队结点为最后一个结点
    if(queue->front->next == NULL)
        queue->rear = queue->front;
    return 0;
}

四、主函数实现和实现结果

int main()
{
    int i;
    linkqueue_t *queue;
    data_t mydata;

    queue = CreateLinkQueue(10);
    if(queue == NULL)
        return -1;
    i = 20;
    while(i){
        if(EnLinkQueue(queue,i--)== -1)
        {
            printf("%d en fial\n",i);
        }
    }
    while(GetLinkQueue(queue,&mydata)==0)
    {
        printf("de:%d\n",mydata);
        DeLinkQueue(queue);
    }

    return 0;
}

运行:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值