队列基本操作

队列定义:

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

操作:

  1. 数组构造

  1. 链表构造

  1. 出/入队

  1. 队列清空

  1. 判空

  1. 获取大小

代码实现:

#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
#define Type int 
#define Capacity  20

//   1.  数组实现

typedef struct queue   //队列定义实现
{
    Type data[Capacity];//数据
    int head;//队头,执行出队
    int tail;//队尾,执行入队,tail指向最后一个元素的下一位;
}queue;

//入队
void QueuePush(queue* q, Type val)
{
    if (q->tail== Capacity)//满了
        return;

    q->data[q->tail++] = val;
}

//出队
void QueuePop(queue* q)
{
    
    if (q->tail-q->head==0)//空队不允许出队
        return;

    //出队
    q->head++;
}

//获取大小
int QueueGetSize(queue* q)
{
    return q->tail - q->head;
}

//判空
bool IsEmpty(queue* q)
{
    return (q->tail - q->head) == 0;
}

//清空队列
void QueueClear(queue* q)
{
    q->head = q->tail = 0;
}

//获取队头/尾
//。。。。。

//   2.  链表实现


typedef struct QueNode  //链表节点
{
    Type value;
    struct QueNode* next;
}QueNode;

//队列定义
typedef struct Queue
{
    QueNode* head;//队头指针
    QueNode* tail;//队尾指针
    int size;//队列大小
}Queue;

//节点创建
QueNode* nodeCreate(Type data)
{
    QueNode* newNode = (QueNode*)malloc(sizeof(QueNode));
    newNode->value = data;
    newNode->next = NULL;
    return newNode;
}

//入队
void queuePush(Queue* q,Type val)
{
    if (q->head == NULL)
    {
        q->head = q->tail = nodeCreate(val);
        q->size++;
        return;
    }

    q->tail->next= nodeCreate(val);
    q->size++;
}

//出队
void queuePop(Queue*q)
{
    if (q->size == 0)
    {
        return;
    }
        
    QueNode* tmp = q->head;
    q->head = q->head->next;
    free(tmp);
    q->size--;
    if (q->size == 0)
    {
        q->head = q->tail = NULL;
    }
}

//判空/获取大小----size


//清空队列
void queueClear(Queue* q)
{
    if (q->head == NULL)
        return;
    QueNode* now = q->head;
    QueNode* after = now->next;
    while (after!= NULL)
    {
        free(now);
        now = after;
        after = now->next;
    }
    free(now);
    q->size = 0;
    q->head = q->tail = NULL;
}


//获取队头/尾
//。。。。

int main()
{
    return 0;
}

有错误欢迎大家指出哦(●'◡'●)

😠

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值