动态队列实现-----C语言
/*****************************************************
Author:Simon_Kly Version:0.1 Date: 20170520
Description: 动态栈
Mail: degaullekong@gmail.com
Funcion List:
*****************************************************/ #include <stdio.h>
#include <stdlib.h> enum ret_result {EMPTY_OK = , EMPTY_NO, ENTER_OK, ENTER_NO, OUT_OK, OUT_NO}; typedef struct node//链结构
{
int data;
struct node *next;
}Node, *Link; typedef struct que//队列结构
{
Link front;//出队口
}Queue; /*判断malloc是否正确执行*/
void is_malloc_ok(void *queue)
{
if (queue == NULL)
{
printf("malloc error!\n");
exit(-);
}
} /*创建队列*/
void create_queue(Queue ** queue)
{
*queue = (Queue *)malloc(sizeof(Queue));
is_malloc_ok(*queue); (*queue)->front = (Link)malloc(sizeof(Node));//为头结点分配空间
is_malloc_ok((*queue)->front); } /*初始化队列*/
void init_queue(Queue *queue)
{
queue->front->next = NULL;//头结点
} /*创建入队元素*/
void create_node(Link * new_node)
{
*new_node = (Link)malloc(sizeof(Node));
is_malloc_ok(*new_node);
(*new_node)->next = NULL;
} /*入队*/
void enter_queue(Queue *queue, Link new_node)
{
Link p = NULL; p = queue->front; while (p->next != NULL)
{
p = p->next;
}
new_node->next = NULL;
p->next = new_node;
} /*判断队空*/
int is_queue_empty(Queue *queue)
{
if (queue->front->next == NULL)
{
return EMPTY_OK;
}
return EMPTY_NO;
}
/*出队*/
int out_queue(Queue *queue)
{
Link p = NULL;
int data; if (queue == NULL)
{
printf("queue is not exist!\n");
return OUT_NO;
} if (EMPTY_OK == is_queue_empty(queue))
{
return OUT_NO;
} p = queue->front->next;
queue->front->next = p->next;
data = p->data; free(p); return data;
} /*销毁队列*/
void release_queue(Queue ** queue)
{
Link p = NULL; if (*queue == NULL)//如队列不存在
{
printf("queue is not exist!\n");
return ;
} p = (*queue)->front->next; while ((*queue)->front->next != NULL)
{
(*queue)->front->next = p->next;
free(p);
p = (*queue)->front->next;
}
free((*queue)->front);
free((*queue));
*queue = NULL;
} int main()
{
int i = ;
int ret;
Queue *queue = NULL;
Link new_node = NULL; create_queue(&queue); init_queue(queue); for (i = ; i < ; i++)
{
create_node(&new_node);
new_node->data = i + ;
enter_queue(queue, new_node);//相当于链表中尾插
}
printf("第一次入队完成\n"); for (i = ; i < ; i++)
{
ret = out_queue(queue); if (ret == EMPTY_OK)
{
break;
}
printf("%d\n", ret);
}
printf("第一次出队完成,共5个元素\n"); for (i = ; i < ; i++)
{
create_node(&new_node);
new_node->data = i + ;
enter_queue(queue, new_node);
}
printf("第二次入队完成,共10个元素\n"); for (i = ; i < ; i++)
{
ret = out_queue(queue); if (ret == EMPTY_OK)
{
break;
}
printf("%d\n", ret);
}
printf("第二次出队完成,共8个元素\n"); release_queue(&queue);
out_queue(queue); return ;
}
动态队列实现-----C语言的更多相关文章
- 队列(链式队列)----C语言
链式队列----用链表实现,链式队列就是一个操作受限的单向链表,如果读者了解单向链表的建立过程,那理解链式队列就很容易了,先回顾一下单向链表的建立过程 (不熟悉单向链表的可以先看看另一片随笔,再回来看 ...
- <2014 05 16> 线性表、栈与队列——一个环形队列的C语言实现
栈与队列都是具有特殊存取方式的线性表,栈属于先进后出(FILO),而队列则是先进先出(FIFO).栈能够将递归问题转化为非递归问题,这是它的一个重要特性.除了FILO.FIFO这样的最普遍存取方式外, ...
- 【数据结构】之队列(Java语言描述)
在[这篇文章]中,我简单介绍了队列的基本数据结构及操作方式,并用C语言代码描述了队列的基本功能实现. JDK中默认为我们提供了队列的API—— Queue . Queue是一个接口,其中提供了处理队列 ...
- 【数据结构】之队列(C语言描述)
队列(Queue)是编程中最常用的数据结构之一. 队列的特点是“先进先出”,就像食堂排队买饭一样,先来的人排在前面,后来的人排在后面:前面的人先买饭,买完饭后离开这个队列.这就是队列的原理,它可以进行 ...
- python3.6调用c语言动态编译文件 c语言编译可执行文件和动态编译等
1.c的代码 dfunc.c #include<stdio.h> int dgfunc(int n) { ){ ; }else{ )+dgfunc(n-); } } 2.动态编译 cmd ...
- 两个栈实现一个队列,C语言实现,队列可伸缩,容纳任意数目的元素。
一.思路:1.创建两个空栈A和B:2.A栈作为队列的入口,B栈作为队列的出口:3.入队列操作:即是入栈A:4.出队列操作:若栈B为空,则将A栈内容出栈并压人B栈,再出 B栈:不为空就直接出栈: 二.代 ...
- 数据结构:循环队列(C语言实现)
生活中有非常多队列的影子,比方打饭排队,买火车票排队问题等,能够说与时间相关的问题,一般都会涉及到队列问题:从生活中,能够抽象出队列的概念,队列就是一个能够实现"先进先出"的存储结 ...
- 队列(循环队列)----C语言
线性结构:有且只有一个根节点,且每个节点最多有一个直接前驱和一个直接后继的非空数据结构 非线性结构:不满足线性结构的数据结构 队列 队列一般分为两类:链式队列和顺序队列 链式队列---链式队列即用链表 ...
- 循环队列的C语言实现
生活中有很多队列的影子,比如打饭排队,买火车票排队问题等,可以说与时间相关的问题,一般都会涉及到队列问题:从生活中,可以抽象出队列的概念,队列就是一个能够实现“先进先出”的存储结构.队列分为链式队列和 ...
随机推荐
- BZOJ 4032: [HEOI2015]最短不公共子串(后缀自动机+记忆化搜索)
传送门 解题思路 首先需要预处理两个串\(nxt(i)(j)\)表示i位置之后最近的\(j\). 第一问直接对\(b\)建后缀自动机,枚举\(a\)的起点暴力匹配. 第二问枚举\(a\)的起点,\(b ...
- error LNK2001: 无法解析的外部符号 __imp__Shell_NotifyIconA@8
编译链接报错 error LNK2001: 无法解析的外部符号 __imp__Shell_NotifyIconA@8 解决方案: 在代码中添加链接库Shell32.lib #pragma commen ...
- FATFS模块应用笔记
FATFS模块应用笔记 如何港 范围 内存使用 模块尺寸缩小 长文件名 统一的API 重入 复制文件访问 性能有效文件访问 对闪存介质考虑 关键的第 延长使用FATFS API 关于FATFS许可证 ...
- Spring Boot 报错记录
Spring Boot 报错记录 由于新建的项目没有配置数据库连接启动报错,可以通过取消自动数据源自动配置来解决 解决方案1: @SpringBootApplication(exclude = Dat ...
- javsscript闭包的一种使用场景--沙箱
//沙箱:模块化,沙箱是一个隔离的环境,最大的好处就是避免全局变量的污染. var model = (function () {//一个匿名的立即执行函数 var price = 900;//这是 ...
- 14. Django MTV及Django模型
MTV 我们或许都听说过MVC模式.MVC是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码.Django ...
- CodeForces - 841B-Godsend-思维
Leha somehow found an array consisting of n integers. Looking at it, he came up with a task. Two pla ...
- upc组队赛6 GlitchBot【枚举】
GlitchBot 题目描述 One of our delivery robots is malfunctioning! The job of the robot is simple; it shou ...
- kmp与扩展kmp模板
kmp 1 #include <algorithm> 2 #include <iostream> 3 #include <cstring> 4 #include & ...
- Cas简介(一)
Cas的全称是Centeral Authentication Service,是对单点登录SSO(Single Sign On)的一种实现.其由Cas Server和Cas Client两部分组成,C ...