队列的链式实现(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 ...
随机推荐
- Java安装与环境配置
Java安装 第一步 安装jdk-8u111-windows(根据操作系统的位数选择安装32位或64位) 注:路径用英文,不要出现中文和空格等.jdk和jre放在同一个文件夹下,便于管理 本例的路径为 ...
- c语言->和 .
->和 . 都是用于访问结构数据的符号. struct point { int x; int y; }; . 符号是在表达式中引用某个特定结构中的成员: 结构名.成员 例如: struct po ...
- Deep Learning 2_深度学习UFLDL教程:矢量化编程(斯坦福大学深度学习教程)
1前言 本节主要是让人用矢量化编程代替效率比较低的for循环. 在前一节的Sparse Autoencoder练习中已经实现了矢量化编程,所以与前一节的区别只在于本节训练集是用MINIST数据集,而上 ...
- Knockout学习笔记之一
1. 四大关键理念: A. DeclarativeBindings(声明式绑定) Easily associate DOM elements with model data using a conc ...
- DIV下的DIV居中
.ParentDIV{ display: -webkit-flex; display: flex; -webkit-align-items: center; align-items: center; ...
- window绝对路径与相对路径
绝对路径:是从盘符开始的路径,形如C:\windows\system32\cmd.exe相对路径:是从当前路径开始的路径,假如当前路径为C:\windows要描述上述路径,只需输入system32\c ...
- Python之路 day2 字符串函数
#Author:ersa name = "ersa" #首字母大写capitalize() print(name.capitalize()) name = "my nam ...
- CSS3 transform对普通元素的N多渲染影响
一.一入transform深似海 一个普普通通的元素,如果应用了CSS3 transform变换,即便这个transform属性值不会改变其任何表面的变化(如scale(1), translate(0 ...
- 第5章 Web自动化测试
5.1 Selenium简介 5.1.1 自动化测试简介 5.1.2 Selenium简介 5.2 Selenium2环境搭建 5.3 Java基础 5.3.1 新建Java工程和类 5.3.2 Ec ...
- vue.js学习笔记之v-bind,v-on
v-bind 指令用于响应地更新 HTML 特性 形式如:v-bind:href 缩写为 :href; v-on 指令用于监听DOM事件 形式如:v-on:click 缩写为 @clic ...