动态队列实现-----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语言实现
生活中有很多队列的影子,比如打饭排队,买火车票排队问题等,可以说与时间相关的问题,一般都会涉及到队列问题:从生活中,可以抽象出队列的概念,队列就是一个能够实现“先进先出”的存储结构.队列分为链式队列和 ...
随机推荐
- linux系统一些信息(待整理)
Linux查看物理CPU个数.核数.逻辑CPU个数 复制代码 # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 ...
- [CSP模拟测试43、44]题解
状态极差的两场.感觉现在自己的思维方式很是有问题. (但愿今天考试开始的一刻我不会看到H I J) A 考场上打了最短路+贪心,水了60. 然而正解其实比那30分贪心好想多了. 进行n次乘法后的结果一 ...
- eclipse debug (调试)基础
进入debug模式: 1.设置断点 2.启动servers端的debug模式 3.运行程序,在后台遇到断点时,进入debug调试状态 ============================= 作用域 ...
- 建立一个更高级别的查询 API:正确使用Django ORM 的方式
https://www.oschina.net/translate/higher-level-query-api-django-orm
- float不完整带来的IE7下的不兼容
这种原因是因为搜索用了float:right;添加报考院校和导入文件没有用float; 解决的方法是:1.给添加报考院校和导入文件分别添加float:left;2.把搜索那部分代码写在添加报考院校和导 ...
- Python Numpy 矩阵级基本操作(1)
NumPy的操作介绍 import numpy as np #导入numpy包,简写为np print "Generate 1*10 matrix" a=np.arange(1,1 ...
- Java开发最常犯的10个错误,打死都不要犯!
原文:http://www.programcreek.com/2014/05/top-10-mistakes-java-developers-make/ 译文:cnblogs.com/chenpi/p ...
- 使用IDEA快速搭建Springboot项目
Spring Boot是由Pivotal团队提供的全新框架,设计目的是用来简化新Spring应用的初始搭建以及开发过程.它主要推崇的是'消灭配置’,实现零配置. 下面就介绍一下如何使用idea快速搭建 ...
- Neo4j-Cypher查询语言-函数
断言函数(Predicate functions) 函数名称 函数说明 ALL(identifier in collection WHERE predicate) 判断一个断言(predicate) ...
- springMVC相应之返回值
string返回值: <%-- Created by IntelliJ IDEA. User: Administrator Date: 2019/11/12 Time: 16:24 To cha ...