动态队列实现-----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 3881 [Coci2015]Divljak——LCT维护parent树链并
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3881 对 S 建 SAM ,每个 T 会让 S 的 parent 树的链并答案+1:在 T ...
- CSS 的基础语法
1.基础语法规则 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明. 每条声明由一个属性和一个值组成.每个属性有一个值.属性和值被冒号分开. selector {property: val ...
- 移动无线测试技能图谱skill-map
# 移动无线测试技能图谱 ## 常用IDE- Android * ADT * Android Studio- iOS * Xcode- Common * Atom * Sublime Text * V ...
- 研究一下phpspider
官方文档 1.下载 官方github下载地址: https://github.com/owner888/phpspider 下载地址可能无法访问,这里提供一个网盘下载地址: 链接: https://p ...
- JS 多个条件判断
// 多个条件判断 // 对象序列(Object) 推荐使用这一种 var obj = {'CJ':'成交', 'WCJ':'未成交'}; if (key in obj) { // TODO } // ...
- activiti7配置文件activiti.cfg.xml,日志文件log4j.properties及pom文件
activiti.cfg.xml:<?xml version="1.0" encoding="UTF-8"?><beans xmlns=&qu ...
- jsp页面间的传值方法
JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数.下面介绍一下实现的方法. (1)直接在URL请求后添加 如:< a href="thexuan.jsp? ...
- Mybatis缓存1----系统缓存及简单配置介绍
mybatis缓存 系统缓存:常用的一级缓存和二级缓存 一级缓存 一级缓存是SqlSession级别的缓存,在操作数据库时需要构建SqlSession对象,在对象中有一个数据结构用于存储缓存数据. ...
- MATLAB图像uint8,uint16,double, rgb转灰度解释
1.uint8,uint16与double 为了节省存储空间,matlab为图像提供了特殊的数据类型uint8(8位无符号整数),以此方式存储的图像称作8位图像.matlab读入图像的数据是uint8 ...
- 微信小程序のmina架构