队列的链式实现(C语言)
/* 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语言)的更多相关文章
- 数据结构算法C语言实现(十一)--- 3.4队列的链式表示和实现
一.简介 FIFO. 二.头文件 //3_4_part1.h /** author:zhaoyu email:zhaoyu1995.com@gmail.com date:2016-6-9 note:r ...
- 队列(链式队列)----C语言
链式队列----用链表实现,链式队列就是一个操作受限的单向链表,如果读者了解单向链表的建立过程,那理解链式队列就很容易了,先回顾一下单向链表的建立过程 (不熟悉单向链表的可以先看看另一片随笔,再回来看 ...
- 队列的顺序存储与链式存储c语言实现
一. 队列 1.队列定义:只允许在表的一端进行插入,表的另一端进行删除操作的线性表. 2.循环队列:把存储队列的顺序队列在逻辑上视为一个环. 循环队列状态: 初始时:Q.front=Q.rear=0 ...
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...
- C++编程练习(6)----“实现简单的队列的链式存储结构“
队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出.简称链队列. 实现代码如下: /* LinkQueue.h 头文件 */ #include<iostream> #defi ...
- 队列(FIFO)—循环队列、队列的链式存储
1 队列的定义 队列是只允许在一端(队尾)进行插入操作,而在另一端(队头)进行删除操作的线性表. 2 队列的特点 1)先进先出是队列最大的特点,是应用中非常常见的模型,例如排队: 2)队列也属于线性表 ...
- 数据结构----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...
- 顺序队列与链式队列--C语言实现
关于队列,因为我自己在平时使用不多,所以在这里直接将队列的两种存储方式放在一起,作为一篇随笔,这两份代码均可直接运行,亲测.注释写的应该也算比较详细了,就不过多的解释了 顺序队列 #include&l ...
- 循环队列和链式队列(C++实现)
循环队列: 1.循环队列中判断队空的方法是判断front==rear,队满的方法是判断front=(rear+1)%maxSize.(我曾经想过为什么不用一个length表示队长,当length==m ...
随机推荐
- GIS服务器需求分析
一. 需求概要 1 边界 核心职责 接收并存储外部各方系统GPS数据 GPS数据实时分发, 轨迹检索 2 流程 GIS客户端向GIS服务器订购 GIS客户端向GIS服务器订购号码(仅有号码这一项业 ...
- linux详细redis安装和php中redis扩展
第一部分:安装redis 希望将redis安装到此目录 1 /usr/local/redis 希望将安装包下载到此目录 1 /usr/local/src 那么安装过程指令如下: 1 2 3 4 5 6 ...
- Deep Learning 1_深度学习UFLDL教程:Sparse Autoencoder练习(斯坦福大学深度学习教程)
1前言 本人写技术博客的目的,其实是感觉好多东西,很长一段时间不动就会忘记了,为了加深学习记忆以及方便以后可能忘记后能很快回忆起自己曾经学过的东西. 首先,在网上找了一些资料,看见介绍说UFLDL很不 ...
- Element is not currently visible and so may not be interacted with错误
用selenium定位时,碰到这种错误的原因: 此种问题的关键是在于用className和id都不唯一所以找不到对象 所以,碰到这种问题就换一种定位方式
- 【更新】【封装必备】封装辅助 - 清理&优化工具 For Win7(IT天空会员专版)
https://www.itsk.com/thread-353560-1-4.html nqawen 发表于 2015-7-9 17:26:37 本帖最后由 Amz 于 2015-11-25 10 ...
- centos7中 npm install express 时Error: Cannot find module 'express'错误
费了很大劲最后在网上找到,在自己的工程目录下再次执行npm install express搞定.
- springmvc使用spring自带日期类型验证
控制器 @Controller public class MyController { // 处理器方法 @RequestMapping(value = "/first.do") ...
- NetworkComms V3 之支持TCP连接和UDP连接
NetworkComms V3 无缝的支持TCP连接和UDP连接. 您可以很容易的创建这两种连接 //创建一个连接信息对象 ConnectionInfo connInfo = ); //创建一个TCP ...
- MSSQL CharIndex()用法
CHARINDEX函数返回字符或者字符串在另一个字符串中的起始位置. CHARINDEX ( expression1 , expression2 [ , start_location ] ) expr ...
- 1238. Folding
http://acm.timus.ru/problem.aspx?space=1&num=1238 DP+记忆化搜索 思路不难,关键是最优结果的储存问题,为了编写方便,直接用string储存最 ...