c语言链式队列

没有想到的一点是
出队步骤
1;判断队列是否为空
2;将front后面的那个节点出列 (先保存
3;判断出队的那个节点是不是rear节点***没有想到这点???
4;释放该节点内存

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

//表示一个节点的类型 
typedef struct linknode_t
{
    int data;
    struct linknode_t *next;
}linknode;
//表示一个队列的类型    
typedef struct linkPoint_t
{
    linknode *front;
    linknode *rear;
}linkQueue;

linkQueue *queue;
linknode *node;

linkQueue *linkQueueInit();
void InlinkQueue(linkQueue *queue, int data);
int OutlinkQueue(linkQueue *queue);
int LQEmpty(linkQueue *queue);

int main()
{
    linkQueueInit();
    int num = 10;
    while(num--){
        InlinkQueue(queue, 1);
        InlinkQueue(queue, 10);
        InlinkQueue(queue, 100);
        printf("%d\n",OutlinkQueue(queue));
        printf("%d\n",OutlinkQueue(queue));
    }

    return 0;
}

linkQueue *linkQueueInit()
{
    //队列的初始化
    //1;创建一个队列 
    //2; 创建一个节点 
    //3对节点初始化 
    //4队列的头尾都指向这个节点
    //5返回这个队列 
    queue = (linkQueue *)malloc(sizeof(linkQueue));
    node = (linknode *)malloc(sizeof(linknode));
    node->next = NULL;
    queue->front = queue->rear = node;
    return queue;
}

void InlinkQueue(linkQueue *queue, int data)
{
    /*
        入队列步骤 
        1;创建一个节点 初始化(赋值data  next域NULL)
        2;rear指向的节点与该节点连接
        3;rear移动  指向该节点   
    */ 
    node = (linknode*)malloc(sizeof(linknode));
    node->data = data;
    node->next = NULL;
    queue->rear->next = node;
    queue->rear = node;
}

int OutlinkQueue(linkQueue *queue)
{
    /*
        出队步骤
        1;判断队列是否为空
        2;将front后面的那个节点出列 (先保存 
        3;判断出队的那个节点是不是rear节点*********没有想到这点???
        4;释放该节点内存 
    */ 
    int data;
    if(!LQEmpty(queue)){
        node = queue->front->next;
        data = node->data;
        queue->front->next = node->next;
        if(node == queue->rear){
            queue->rear = queue->front;
        }
        free(node);
        return data;
    }else{
        printf("队列为空\n");
        exit(0); 
    }
}

int LQEmpty(linkQueue *queue)
{
    if(queue->front == queue->rear){
        return 1;
    }else{
        return 0;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值