数据结构之链队列及其相关操作

数据结构之链队列及其相关操作

#include <stdio.h>
#include <stdlib.h>
typedef struct node  //定义链队列结点类型
{
    int data;
    struct node *next;
}QueueNode;

typedef struct       //定义链队列对头指针和队尾指针
{
    QueueNode *front;
    QueueNode *rear;
}LinkQueue;

LinkQueue* Init_Queue(LinkQueue *q);
void Enter_Queue(LinkQueue *q,int num);
void Show_Queue(LinkQueue *q);
void Delete_Queue(LinkQueue *q,int *e);

void main()
{
    int e;
    LinkQueue *q = NULL;
    q = Init_Queue(q);
    printf("执行入队操作:\n");
    Enter_Queue(q,100);
    Enter_Queue(q,99);
    printf("遍历队列:\n");
    Show_Queue(q);
    printf("执行出队操作:\n");
    Delete_Queue(q,&e);
    printf("%d出队\n",e);
    Delete_Queue(q,&e);
    printf("%d出队\n",e);
    Delete_Queue(q,&e);
    printf("%d出队\n",e);
}

LinkQueue* Init_Queue(LinkQueue *q)//需要返回指针
{
    QueueNode *p;
    q = (LinkQueue *)malloc(sizeof(LinkQueue));
    p = (QueueNode *)malloc(sizeof(QueueNode));
    p->next = NULL;
    q->front = p;
    q->rear = p;
    return q;
}

void Enter_Queue(LinkQueue *q,int num)
{
    QueueNode *s = (QueueNode*)malloc(sizeof(QueueNode));
    s->data = num;
    s->next = NULL;
    q->rear->next = s;
    q->rear = s;
}

void Show_Queue(LinkQueue *q)
{
    QueueNode *r;
    r = q->front->next;
    printf("%d  ",r->data);
    r = r->next;
    while(r != NULL)
    {
        printf("%d  ",r->data);
        r = r->next;
    }
    printf("\n");
}

void Delete_Queue(LinkQueue *q,int *e)//需要判断队列是否为空 为空不能删除
{
    QueueNode *p = NULL;
    if(q->front->next == NULL)//判断队空  不再使用函数了
    {
        printf("队列为空!\n");
        exit(1);
    }
    else
    {
        p = q->front->next;
        *e = p->data;
        q->front->next = p->next;
        free(p);
        if(q->front->next == NULL)//出队后说明此时的尾指针是没有指向的
        {
            q->rear = q->front;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值