C语言实现链队列代码

本文实例为大家分享了C语言实现链队列的具体代码,供大家参考,具体内容如下

#include <stdio.h>

/* 队列的结构体 */
typedef int DataType;
#define NODE_LEN sizeof(NODE) 

/* 队列的节点 */
typedef struct stNode
{
  DataType data;
  struct stNode* next;
}NODE;

/* 队列 */
typedef struct stQueue
{
  NODE* head; //队列的头
  NODE* tail; //队列的尾
}QUEUE;

/* 初始化队列,不带头结点*/
int initQueue(QUEUE* INQueue)
{

  INQueue->head = NULL;
  INQueue->tail = NULL;

  return 0;
}

/* 从队尾插入一个元素 */
int enQueue(QUEUE* InQueue,DataType InData)
{
  NODE* pNewNode = (NODE*)malloc(NODE_LEN);
  if (pNewNode == NULL)
  {
    return -1;
  }

  pNewNode->data = InData;
  pNewNode->next = NULL;

  /* 判断,现在队列里面有没有节点 */
  if (InQueue->head == NULL)
  {
    InQueue->head = pNewNode;
    InQueue->tail = pNewNode;
  }
  else
  {
    InQueue->tail->next = pNewNode;
    InQueue->tail = pNewNode;
  }

  return 0;
}

/* 遍历该队列 */
int visitQueue(QUEUE InQueue)
{
  QUEUE* pstTemp = &InQueue;

  /* 判断队列是否为空队列 */
  if (pstTemp->head == NULL)
  {
    printf("visitQueue: this queue is empty\n");
    return -1;
  }

  /* 遍历该队列中的所有元素 */
  while (pstTemp->head->next != NULL)
  {
    printf("%d ", pstTemp->head->data);
    pstTemp->head = pstTemp->head->next;
  }
  printf("%d \n", pstTemp->head->data);

  return 0;
}

/* 出队列 */
int delQueue(QUEUE* InQueue,DataType* OutData)
{
  if (InQueue->head == NULL)
  {
    printf("delQueue: this queue is empty\n");
    return -1;
  }

  *OutData = InQueue->head->data;

  NODE* pstTemp = InQueue->head;
  InQueue->head = InQueue->head->next;

  delete pstTemp;
  return 0;
}

/* 判断队列是否是空队列 */
int isEmptyQueue(QUEUE InQueue)
{
  if (InQueue.head == NULL)
  {
    return 0; //是空队列
  }
  return 1; //不是空队列
}

int main()
{
  /* 创建一个队列 */
  QUEUE queue;
  DataType data;

  initQueue(&queue);

  /* 入队列 */
  enQueue(&queue, 12);
  enQueue(&queue, 11);
  enQueue(&queue, 2);
  visitQueue(queue);

  /* 出队列 */
  delQueue(&queue, &data);
  visitQueue(queue);
  printf("data = %d\n", data);

  visitQueue(queue);

  if (0 == isEmptyQueue(queue))
  {
    printf("This is empty queue\n");
  }
  else
  {
    printf("This is not empty queue\n");
  }
  return 0;
}

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

(0)

相关推荐

  • C语言数据结构链表队列的实现

    C语言数据结构链表队列的实现 1.写在前面 队列是一种和栈相反的,遵循先进先出原则的线性表. 本代码是严蔚敏教授的数据结构书上面的伪代码的C语言实现代码. 分解代码没有包含在内的代码如下: #include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 typedef int QElemtype; typedef int status; 2.代码分解 2.1对队列和节点的结构定义 typedef struct

  • 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 { QueueNod

  • C语言单链队列的表示与实现实例详解

    1.概述: C语言的队列(queue),是指先进先出(FIFO, First-In-First-Out)的线性表.在具体应用中通常用链表或者数组来实现.队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作. 而单链队列使用链表作为基本数据结果,因此不存在伪溢出的问题,队列长度也没有限制.但插入和读取的时间代价会比较高 2.实例代码: /* 单链队列--队列的链式存储结构 */ typedef struct QNode { QElemType data; struct

  • C语言版实现链队列

    本文实例为大家分享了C语言实现链队列的具体代码,供大家参考,具体内容如下 源文件部分:  指针没学好的同学很难看懂^_^,有点乱,希望对大家有点帮助. #include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<string.h> typedef int Elemtype; #include"LQueue.h" int main() { Deque head; inst

  • C语言实现链队列代码

    本文实例为大家分享了C语言实现链队列的具体代码,供大家参考,具体内容如下 #include <stdio.h> /* 队列的结构体 */ typedef int DataType; #define NODE_LEN sizeof(NODE) /* 队列的节点 */ typedef struct stNode { DataType data; struct stNode* next; }NODE; /* 队列 */ typedef struct stQueue { NODE* head; //队

  • C语言实现链队列基本操作

    队列的链式存储结构实现,相比于循环队列实现要复杂一些,但是没有队满的限制. 头文件声明 #include <stdio.h> #include <stdlib.h> /** * 队列的链式存储实现 * [带头结点的单链表] * [-类似于链栈,队列的链式存储实现也不会出现队满的情况] */ //数据类型 typedef int ElemType; //定义节点 typedef struct SqQueueNode { ElemType data;//数据域 struct SqQue

  • C#实现顺序队列和链队列的代码实例

    和上篇栈的实现基本是一个思路: 废话不多说,直接写代码吧 //自定义队列接口 namespace 队列 { interface IQueue<T> { int Count { get; } int GetLength(); bool IsEmpty(); void Clear(); void Enqueue(T item); T Dequeue(); T Peek(); } } //顺序队列的实现类 namespace 队列 { class SeqQueue<T> : IQueue

  • C++代码实现链队列详解

    目录 主要功能: 完整代码展示: 总结 主要功能: 初始化.入队.出队.取队头元素.销毁队列.输出队列 完整代码展示: #include <iostream> using namespace std; #define MAXSIZE 100 typedef struct QueNode{ //定义链队列存储结构 int data; QueNode * next; }QNode,*QuePtr; typedef struct { //定义链队列指针 QuePtr front; //队头指针 Qu

  • C语言责任链模式示例代码

    目录 介绍: 作用: 类比: 示例: 总结 介绍: ​ 责任链模式是一种行为模式,它可以允许你将请求沿着处理者链进行发送,收到请求以后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者: 作用: 将请求按照链的方式一一传递 类比: ​ 公司申请报销,首先要leader审批通过,然后是HR,再然后是财务,最后是老板,一级一级的将请求传递: 示例: #include <stdio.h> #include <assert.h> #include "list.h&q

  • C语言实现循环队列

    本文实例为大家分享了C语言实现循环队列的具体代码,供大家参考,具体内容如下 注意事项: 1.循环队列,是队列的顺序表示和实现.因为是尾进头出,所以和顺序栈不同的是需要将顺序队列臆造成一个环状的空间,以便在尾部添加满之后从头部空位开始插入. 2.也可以使用数组队列,也就是不能动态增长的顺序队列,这样不需要每次取模最大值来构成环形空间.每次插入新的队列尾元素时,尾指针增1,每当删除队列头元素时,头指针增1. 3.尾指针会出现在头指针之前,由此特性,循环队列在无法预估使用大小时,不宜使用. 4.在每一

  • C语言数据结构系列队列篇

    目录 一.队列(Queue) 0x00队列的概念 0x01队列的结构 二.队列的定义 0x00链式队列 0x02 接口函数 三.队列的实现 0x00队列初始化(QueueInit) 0x01销毁队列(QueueDestroy) 0x02判断队列是否为空(HeapIsEmpty) 0x03入队(QueuePush) 0x04出队(QueuePop) 0x05 返回队头数据(QueueFront) 0x06 返回队尾数据(QueueBack) 0x07 求队列大小(QueueSize) 0x08完整

随机推荐