动态队列实现-----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语言实现
生活中有很多队列的影子,比如打饭排队,买火车票排队问题等,可以说与时间相关的问题,一般都会涉及到队列问题:从生活中,可以抽象出队列的概念,队列就是一个能够实现“先进先出”的存储结构.队列分为链式队列和 ...
随机推荐
- Panel
在Panel上绘图的实现 近期制作了FDS的一个建模工具,由于知识有限,做出的效果是2D的.昨天上课的时候看老师画一个长方体,突然想到,为什么不给普通的2D图形加画上几条直线,就能实现2D图形的3D视 ...
- Redis入门很简单之三【常见参数配置】
Redis入门很简单之三[常见参数配置] 博客分类: NoSQL/Redis/MongoDB redisnosql缓存中间件memcached Redis的一下常见设置都是通过对redis.conf ...
- c#网络通信框架networkcomms内核解析之一 消息传送
networkcomms.net 来自英国的网络通信框架 官方网址 www.networkcomms.net 中文网址www.networkcomms.cn 在网络通信程序中,本地的类或者对象,要传输 ...
- SecureCRT key登录linux ssh设置
一.首先用secureCrt创建密钥 1.使用SecureCRT创建私钥和公钥. SecureCRT quick Connect-> Authentiation -> Public Key ...
- 运维 03 Linux之文档与目录结构
Linux之文档与目录结构 Linux文件系统结构 Linux目录结构的组织形式和Windows有很大的不同.首先Linux没有“盘(C盘.D盘.E盘)”的概念.已经建立文件系统的硬盘分区被挂载到 ...
- linux基础--目录介绍
Windows和Linux文件系统区别 在 windows 平台下,打开“计算机”,我们看到的是一个个的驱动器盘符: 每个驱动器都有自己的根目录结构,这样形成了多个树并列的情形,如图所示: 在 Lin ...
- 泛微weaver_oa filebrowser.jsp 任意目录遍历
url//document/imp/filebrowser.jsp?dir=/etc/
- pytest的执行方式及搜索原则
pytest的执行方式 Pytest/py.test(终端,命令行,pycharm可配置pytest方式执行) 1. Pytest –v (最高级别信息—verbose) 2. pytest -v - ...
- Octave的安装
本文是参考吴恩达老师的深度学习视频而做的笔记 深度学习 引言 挑战:AI真正的挑战在于解决那些对人类来说很容易执行,但很难形式化描述的问题,比如识别人们所说的话/图像中的脸/分辨苹果和梨. 解决方案: ...
- 解决code first Migration 增加外键时出现错误的问题
先上模型 Comment public class Comment { [Key] public int CommentId { get; set; } [Required] public int S ...