数据结构之队列的实现(含全部代码)

简介: 数据结构之队列的实现(含全部代码)

数据结构之队列的实现

  • 队列的实现(单链表)

队列的实现(单链表)

以下是有链表模拟队列

如果出现错误以及可优化的部分欢迎留言指教。

实现队列所需要的头文件

#pragma once
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
#include<assert.h>

定义数据类型以及创建队列的结点

typedef int QDataType;
typedef struct QueueNode
{
  QDataType data;
  struct QueueNode* next;
}QNode;

创建队列(含队列的头和尾)

typedef struct Queue
{
  QNode* head;
  QNode* tail;
}Queue;


队列所需要实现的函数接口

//初始化
void QueueInit(Queue* pq);
//销毁
void QueueDestory(Queue* pq);
//队头入
void QueuePush(Queue* pq, QDataType x);
//队尾出
void QueuePop(Queue* pq);
//取队头的元素
QDataType QueueFront(Queue* pq);
//取对尾的元素
QDataType QueueBack(Queue* pq);
//计算元素个数
int QueueSize(Queue* pq);
//判断队列是否为空
bool QueueEmpty(Queue* pq);

函数的实现

#include"Queue.h"
//初始化
void QueueInit(Queue* pq)
{
  assert(pq);
  pq->head = NULL;
  pq->tail = NULL;
}
//销毁
void QueueDestory(Queue* pq)
{
  assert(pq);
  QNode* cur = pq->head;
  while(cur)
  {
    QNode* next = cur->next;
    free(cur);
    cur = next;
  }
  pq->head = pq->tail = NULL;
}
//队头入
void QueuePush(Queue* pq, QDataType x)
{
  assert(pq);
  QNode* newnode = (QDataType*)malloc(sizeof(QDataType));
  if (newnode == NULL)
  {
    printf("malloc fail\n");
    exit(-1);
  }
  newnode->data = x;
  newnode->next = NULL;
  if (pq->tail == NULL)
  {
    pq->head = pq->tail = newnode;
  }
  else
  {
    pq->tail->next = newnode;
    pq->tail = newnode;
  }
}
//队尾出
void QueuePop(Queue* pq)
{
  assert(pq);
  assert(pq->head);
  if (pq->head->next == NULL)
  {
    free(pq->head);
    pq->head = pq->tail = NULL;
  }
  else
  {
    QNode* next = pq->head->next;
    free(pq->head);
    pq->head = next;
  }
}
//取队头的元素
QDataType QueueFront(Queue* pq)
{
  assert(pq);
  assert(pq->head);
  return pq->head->data;
}
//取对尾的元素
QDataType QueueBack(Queue* pq)
{
  assert(pq);
  assert(pq->head);
  return pq->tail->data;
}
//计算元素个数
int QueueSize(Queue* pq)
{
  assert(pq);
  int size = 0;
  QNode* cur = pq->head;
  while (cur != NULL)
  {
    size++;
    cur = cur->next;
  }
}
//判断队列是否为空
bool QueueEmpty(Queue* pq)
{
  assert(pq);
  return pq->head == NULL;
}
目录
相关文章
|
4天前
|
算法 C语言
【数据结构与算法 经典例题】使用栈实现队列(图文详解)
【数据结构与算法 经典例题】使用栈实现队列(图文详解)
|
4天前
|
存储 算法
【数据结构和算法】--队列的特殊结构-循环队列
【数据结构和算法】--队列的特殊结构-循环队列
7 0
|
4天前
|
存储 测试技术
【数据结构】操作受限的线性表,队列的具体实现
【数据结构】操作受限的线性表,队列的具体实现
14 4
|
4天前
|
算法 C语言
【数据结构与算法 经典例题】使用队列实现栈(图文详解)
【数据结构与算法 经典例题】使用队列实现栈(图文详解)
|
5天前
|
算法
【C/数据结构和算法】:栈和队列
【C/数据结构和算法】:栈和队列
15 1
|
3天前
【海贼王的数据航海】栈和队列
【海贼王的数据航海】栈和队列
4 0
|
4天前
|
算法 程序员 数据处理
【数据结构与算法】使用单链表实现队列:原理、步骤与应用
【数据结构与算法】使用单链表实现队列:原理、步骤与应用
|
4天前
|
算法
【数据结构和算法】---栈和队列的互相实现
【数据结构和算法】---栈和队列的互相实现
5 0
|
4天前
|
算法
【数据结构和算法】--队列
【数据结构和算法】--队列
4 0
|
6天前
|
算法
数据结构和算法常见的问题和代码
数据结构和算法常见的问题和代码