C语言实现链队列

 更新时间:2018年07月23日 08:34:08   作者:yubo_725  
这篇文章主要为大家详细介绍了C语言实现链队列,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

记录一下C语言实现的链队列代码,供大家参考,具体内容如下

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef int ElemType;

//链队列的结点定义 
typedef struct node{
  ElemType val;
  struct node* next;
}QueueNode;

//链队列的定义,包含队头指针和队尾指针 
typedef struct queue {
  QueueNode* front;
  QueueNode* rear;
}LinkedQueue;

//初始化队列 
LinkedQueue* initQueue() {
  LinkedQueue* queue = (LinkedQueue*)malloc(sizeof(LinkedQueue));
  queue->front = (QueueNode*)malloc(sizeof(QueueNode));
  queue->front->next = NULL;
  queue->rear = queue->front;
}

//元素入队 
void enQueue(LinkedQueue* queue, ElemType elem) {
  QueueNode* node = (QueueNode*)malloc(sizeof(QueueNode));
  node->val = elem;
  node->next = NULL;
  queue->rear->next = node;
  queue->rear = node;
}

//队列是否为空 
bool isQueueEmpty(LinkedQueue* queue) {
  return queue->front == queue->rear; 
}

//元素出队 
ElemType deQueue(LinkedQueue* queue) {
  if(!isQueueEmpty(queue)) {
    QueueNode* p = queue->front;
    queue->front = p->next;
    ElemType e = queue->front->val;
    free(p);
    return e;
  }
  return NULL;
}

int main()
{
  LinkedQueue* queue = initQueue();
  int i;
  for(i = 0; i < 20; i++) {
    enQueue(queue, i);
  }
  while(!isQueueEmpty(queue)) {
    printf("deQueue: %d\n", deQueue(queue));
  }
  return 0;
}

需要注意的是:

  • 初始化队列时,队头和队尾都指向同一个结点(头结点,不存储数据);
  • 判断队列是否为空,即判断队头指针和队尾指针是否相同;
  • 队头元素是当前front指针的next结点中的值

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C++中replace()函数使用方法汇总

    C++中replace()函数使用方法汇总

    这篇文章主要介绍了C++中replace()函数使用方法汇总,在这篇文章中为大家详细介绍C++ replace()函数的各种应用方式,希望朋友们可以从这里介绍的内容充分掌握这一应用技巧
    2015-11-11
  • VS2017中配置QT5.12.0的图文教程

    VS2017中配置QT5.12.0的图文教程

    本文主要介绍了VS2017中配置QT5.12.0的图文教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • C语言实现绘制LoveBeat爱心曲线的示例代码

    C语言实现绘制LoveBeat爱心曲线的示例代码

    这篇文章主要为大家详细介绍了如何溧阳C语言实现绘制LoveBeat爱心曲线,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-03-03
  • C++自定义封装socket操作业务类完整实例

    C++自定义封装socket操作业务类完整实例

    这篇文章主要介绍了C++自定义封装socket操作业务类,结合完整实例形式分析了Linux环境下C++操作socket的封装业务类,可实现基本的socket连接、参数设置、发送请求等基本功能,需要的朋友可以参考下
    2017-08-08
  • C语言之qsort函数详解

    C语言之qsort函数详解

    这篇文章主要介绍了C语言中qsort函数的用法实例详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
    2021-08-08
  • c++ TCHAR转string导致中文缺失或乱码问题及解决

    c++ TCHAR转string导致中文缺失或乱码问题及解决

    这篇文章主要介绍了c++ TCHAR转string导致中文缺失或乱码问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • C语言超详细讲解循环与分支语句基础

    C语言超详细讲解循环与分支语句基础

    各位小伙伴们,今天给大家带来的是循环与分支语句,本篇将会向大家介绍这些语句的格式和使用的基本方法,感兴趣的朋友来看看吧
    2022-04-04
  • C++使用extern实现源文件变量与类成员函数的巧妙共享

    C++使用extern实现源文件变量与类成员函数的巧妙共享

    C++中使用extern关键字可实现在源文件之间共享变量与类成员函数,通过声明变量或类在头文件中,再在一个源文件中定义,其他源文件通过extern引用,促使模块化、可维护的代码组织,这篇文章主要介绍了C++用extern实现源文件变量与类成员函数的巧妙共享,需要的朋友可以参考下
    2024-03-03
  • 详谈全排列next_permutation() 函数的用法(推荐)

    详谈全排列next_permutation() 函数的用法(推荐)

    下面小编就为大家带来一篇详谈全排列next_permutation() 函数的用法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • C语言超详细文件操作基础上篇

    C语言超详细文件操作基础上篇

    这篇文章主要为大家详细介绍了C语言的文件操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03

最新评论