数据结构之链式队列

队列链式存储实现

链式队列 队列头 + 带头结点的链表

数据类型
typedef int DataType;

//结点类型
struct node 
{
    DataType data;
    struct node *next;
};

//队列头
typedef struct 
{
    //front指向链表头
    struct node *front;
    //rear指向链表尾
    struct node *rear;
}LinkQueue;

常用的操作
1.创建空的链式队列
LinkQueue *create_empty_linkqueue()
{
    1.为链表头在堆区分配空间,head保存首地址
    2.为队列头在堆区分配空间,q保存首地址
    3.q->front = q->rear = head;
    4.返回队列头首地址q
}

2.判空 q->front == q->rear
int is_empty_linkqueue(LinkQueue *q)
{

}

3.入队,链表尾插法,更新rear
int enter_linkqueue(LinkQueue *q,DataType data)
{

}

4.出队,删除头结点,使下一结点成为新的头结点,并返回新头结点数据
DataType delete_linkqueue(LinkQueue *q)
{

}
#ifndef __HEAD__H
#define __HEAD__H


#include <stdio.h>
#include <stdlib.h>
#include <string.h>


typedef int DataType;
//结点类型
struct node
{
    DataType data;
    struct node *next;
};


//队列头
typedef struct
{
    //front指向链表头
    struct node *front;
    //rear指向链表尾
    struct node *rear;
}LinkQueue;


extern LinkQueue *creat_linkqueue();
extern int is_empty_linkqueue(LinkQueue *q);
extern int enter_linkqueue(LinkQueue *q,DataType data);
extern DataType delete_linkqueue(LinkQueue *q);


#endif


#include "head.h"


//新建一个队列头
LinkQueue *creat_linkqueue()
{
    //先分配一个头结点,head保存其地址
    //在为队列头在堆区分配空间,q保存其首地址
    struct node *head = NULL;
    LinkQueue *q = NULL;


    //创建空链表,链表队列头结点
    head = (struct node *)malloc(sizeof(struct node));
    memset(head,0,sizeof(struct node));//清空后指针域为NULL。表示空链表


    //队列头,指向链表头跟链表尾
    q = (LinkQueue *)malloc(sizeof(LinkQueue));
 
    q->front = head;
    q->rear = head;


    return q; 
}


///链表判空
int is_empty_linkqueue(LinkQueue *q)
{
    return q->front == q->rear;
}


//尾插法插入数据
int enter_linkqueue(LinkQueue *q,DataType data)
{
    struct node *temp = NULL;


    temp = (struct node *)malloc(sizeof(struct node));
    temp->data = data;
    
    temp->next = q->rear->next;
    q->rear->next = temp;


    //更新rear
    q->rear = temp;


    return 0;


}


//删头法对头数据出队
DataType delete_linkqueue(LinkQueue *q)
{
    struct node *temp = NULL;


    //保存原头结点首地址
    temp = q->front;


    //更新front
    q->front = q->front->next;


    free(temp);


    temp = NULL;




    return  q->front->data;
}
#include "head.h"


int main()
{
    int i = 0;
    LinkQueue *q = NULL;


    q = creat_linkqueue();


    for(i = 0;i < 10;i++)
    {
        enter_linkqueue(q,i);
    }


    for(i = 9;i >= 0;i--)
    {
        printf("%-3d",delete_linkqueue(q));
    }
    putchar('\n');


    return 0;


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值