/* 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. 【转】Linux下patch打补丁命令

    [转]Linux下patch打补丁命令 转自:http://www.cnblogs.com/noaming1900/archive/2010/10/28/1863282.html 此命令用于为特定软件 ...

  2. [Java基础]循环结构3

    [Java基础]循环结构3 break 与 continue 中断循环... /** 文件路径:G:\JavaByHands\循环语句\ 文件名称:BreakTest.java 编写时间:2016/6 ...

  3. Physx入门

    [疑问] 1.Physx中的场景有大小的概念么?如果有大小,那么场景中的刚体超出场景边界之后, 如何定义之后的行为. 2.如何给一个刚体增加动量?目前的接口只看到设置速度或者增加作用力.

  4. js高级程序设计(六)面向对象

    ECMA-262 把对象定义为:“无序属性的集合,其属性可以包含基本值.对象或者函数.”严格来讲,这就相当于说对象是一组没有特定顺序的值.对象的每个属性或方法都有一个名字,而每个名字都映射到一个值.正 ...

  5. WPF:ListView 分组合并

    CollectionViewSource 绑定的是从数据库取出的数据ListBind 以DeptName为分组依据 <Window.Resources> <CollectionVie ...

  6. Oracle创建定时器

    --创建日志信息表(测试表) create table T_LOG( id number, datetime DATE); --插入测试数据insert into t_log values (1,'2 ...

  7. 将FlashPlayerDebugger的trace()功能输出到日志

    1.XP:C:\Documents and Settings\{username} win7:C:\Users\{username} 在以上文件夹下生成mm.cfg文件,写入如下内容: ErrorRe ...

  8. iOS开发UI篇—实现UItableview控件数据刷新

    iOS开发UI篇—实现UItableview控件数据刷新 一.项目文件结构和plist文件 二.实现效果 1.说明:这是一个英雄展示界面,点击选中行,可以修改改行英雄的名称(完成数据刷新的操作). 运 ...

  9. ionic本质

    ionic本质一开发工具,ionic项目目录里在大堆东西,一堆插件(plugins),还有一堆npm包(node_modules),其实都是骗人的-( ̄▽ ̄-)~ 什么nodejs,npm只是为了解决 ...

  10. 用Firefox的debugger来调试JavaScript

    1.自我感觉比firebug更好用 https://developer.mozilla.org/zh-CN/docs/Tools/Debugger