/* Queue.h */

#ifndef QUEUE_H_INCLUDED
#define QUEUE_H_INCLUDED
#include <stdio.h>
#include <stdlib.h> struct Queue_Array {
int element;
struct Queue_Array* next;
};
typedef struct Queue_Array* Q_Array; struct _Queue {
Q_Array q;
Q_Array Front;
Q_Array Rear;
}; typedef struct _Queue* Queue; /* Queue Operation */
int isEmpty(Queue Q);
void CreateQueue(Queue Q);
void make_Queue_Empty(Queue Q);
void Enqueue(int Elmt, Queue Q);
int Front(Queue Q);
void Dequeue(Queue Q);
int FrontAndDequeue(Queue Q);
void printQueue(Queue Q); #endif // QUEUE_H_INCLUDED
/* Queue.c */

#include "Queue.h"

int isEmpty(Queue Q) {
return (Q->Front == Q->Rear);
} void CreateQueue(Queue Q) { Q_Array q = (Q_Array)malloc(sizeof(struct Queue_Array));
q->element = 0;
q->next = NULL;
Q->Front = Q->Rear = q;
} void Enqueue(int Elmt, Queue Q) { Q_Array q = (Q_Array) malloc (sizeof(struct Queue_Array));
q->element = Elmt;
q->next = NULL;
Q->Rear->next = q;
Q->Rear = q;
} int Front(Queue Q) {
return Q->Front->element;
} void Dequeue(Queue Q) { Q_Array q = Q->Front;
Q->Front = Q->Front->next;
free(q); } int FrontAndDequeue(Queue Q) { int frontElmt;
Q_Array q = Q->Front;
frontElmt = q->element;
Q->Front = Q->Front->next;
free(q);
return frontElmt;
} void make_Queue_Empty(Queue Q) { Q_Array q = Q->Front; while(q != Q->Rear) { Q->Front = Q->Front->next;
free(q);
q = Q->Front;
} Q->Front = Q->Rear = NULL;
Q->q = NULL;
free(q);
} void printQueue(Queue Q) { Q_Array q = Q->Front; while (q != Q->Rear->next) { printf("%d ", q->element);
q = q->next;
}
printf("\n");
}

测试:

/* main.c */

#include "Queue.h"

int main()
{
Queue Q = (Queue) malloc (sizeof(struct _Queue));
Q->Front = NULL;
Q->q = NULL;
Q->Rear = NULL; CreateQueue(Q); Enqueue(1, Q);
Enqueue(3, Q);
Enqueue(5, Q);
Enqueue(7, Q);
Enqueue(9, Q);
Enqueue(11, Q); printQueue(Q);
Dequeue(Q);
printQueue(Q); printf("Queue's front element is %d\n", Front(Q));
FrontAndDequeue(Q);
printf("Queue's front element is %d\n", Front(Q)); printQueue(Q);
return 0;
}

结果:

队列的链式实现(C语言)的更多相关文章

  1. 数据结构算法C语言实现(十一)--- 3.4队列的链式表示和实现

    一.简介 FIFO. 二.头文件 //3_4_part1.h /** author:zhaoyu email:zhaoyu1995.com@gmail.com date:2016-6-9 note:r ...

  2. 队列(链式队列)----C语言

    链式队列----用链表实现,链式队列就是一个操作受限的单向链表,如果读者了解单向链表的建立过程,那理解链式队列就很容易了,先回顾一下单向链表的建立过程 (不熟悉单向链表的可以先看看另一片随笔,再回来看 ...

  3. 队列的顺序存储与链式存储c语言实现

    一. 队列 1.队列定义:只允许在表的一端进行插入,表的另一端进行删除操作的线性表. 2.循环队列:把存储队列的顺序队列在逻辑上视为一个环. 循环队列状态: 初始时:Q.front=Q.rear=0 ...

  4. 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列

    一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...

  5. C++编程练习(6)----“实现简单的队列的链式存储结构“

    队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出.简称链队列. 实现代码如下: /* LinkQueue.h 头文件 */ #include<iostream> #defi ...

  6. 队列(FIFO)—循环队列、队列的链式存储

    1 队列的定义 队列是只允许在一端(队尾)进行插入操作,而在另一端(队头)进行删除操作的线性表. 2 队列的特点 1)先进先出是队列最大的特点,是应用中非常常见的模型,例如排队: 2)队列也属于线性表 ...

  7. 数据结构----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列

    一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...

  8. 顺序队列与链式队列--C语言实现

    关于队列,因为我自己在平时使用不多,所以在这里直接将队列的两种存储方式放在一起,作为一篇随笔,这两份代码均可直接运行,亲测.注释写的应该也算比较详细了,就不过多的解释了 顺序队列 #include&l ...

  9. 循环队列和链式队列(C++实现)

    循环队列: 1.循环队列中判断队空的方法是判断front==rear,队满的方法是判断front=(rear+1)%maxSize.(我曾经想过为什么不用一个length表示队长,当length==m ...

随机推荐

  1. WinForm关闭窗体彻底的退出方式

    //System.Environment.Exit(0); //Process.GetCurrentProcess().Kill(); //System.Threading.Thread.Curren ...

  2. PHP : Reflection API

    PHP Reflection API是PHP5才有的新功能,它是用来导出或提取出关于类.方法.属性.参数等的详细信息,包括注释. PHP Reflection API有: class Reflecti ...

  3. "SQLServer无法打开用户默认数据库,登录失败,错误4064"的解决办法

    "SQLServer无法打开用户默认数据库,登录失败,错误4064"的解决办法 1.检查登录密码 如果密码错误,修改数据库密码,用windows身份验证登录进去, (1)安全--登 ...

  4. C#中静态与非静态方法比较

    C#静态方法与非静态方法的区别不仅仅是概念上的,那么他们有什么具体的区别呢?让我们通过本文向你做一下解析. C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用 ...

  5. WCF 4.0 进阶系列 -- 随笔汇总

    WCF4.0 进阶系列–前言 WCF4.0 进阶系列--第一章 WCF简介 WCF4.0进阶系列--第二章 寄宿WCF服务 WCF4.0进阶系列--第三章 构建健壮的程序和服务 WCF4.0进阶系列- ...

  6. [Mysql] mysql临时表corrupt

    问题描述 机房临时硬件问题, 机器掉电. 恢复后, 重启mysql进程, 结果出现core dump. 而且一直循环, 无法终止, 只能kill掉. backtrace如下. # service my ...

  7. linux复习

    linux的特点           - 免费的/开源           - 支持多线程/多用户           - 安全性好           - 对内存和文件管理优越       关机命令 ...

  8. 个人练习--gif图流程

    1:素材图片a  图片b 2:窗口--->时间轴/动画 3:复制所选帧--->设置帧延迟 4:文件--->存储为WEB格式--->gif格式

  9. hdu4758Walk Through Squares(ac自动机+dp)

    链接 dp[x][y][node][sta] 表示走到在x,y位置node节点时状态为sta的方法数,因为只有2个病毒串,这时候的状态只有4种,根据可走的方向转移一下. 这题输入的是m.N,先列后行, ...

  10. 【bzoj1798】维护序列

    线段树维护两个标记. *0的操作在实质上没有任何影响. #include <cstdio> #include <cctype> #define rep(i,a,b) for ( ...