数据结构(C语言版)---第三章栈和队列 3.4.2 队列的链式表示和实现(循环队列)
这个是循环队列的实现,至于串及数组这两章,等有空再看,下面将学习树。
源码如下:
#include <stdio.h>
#include <stdlib.h> #define MAXQSIZE 8 typedef int QElemType ; typedef struct
{
QElemType *base;
int front;
int rear; }SqQueue; int InitSqQueue(SqQueue *S)
{
S->base = (QElemType *)malloc(sizeof(QElemType)*MAXQSIZE); printf("Init %p\n",S->base);
if(!S->base)
{
exit();
} S->front = S->rear = ; return ;
} int InsertQueue(SqQueue *S, QElemType e)
{
if((S->rear + )%MAXQSIZE == S->front)
{
printf("full e: %d !!!\n",e); int temp = ;
DeleteQueue(S,&temp);
InsertQueue(S,e);
return -;
} *(S->base + S->rear) = e;
printf("insert %p : %d\n",(S->base + S->rear),e); S->rear = (S->rear + )%MAXQSIZE; return ;
} int DeleteQueue(SqQueue *S, QElemType * e)
{
if(S->front == S->rear)
{
return -; } *e = *(S->base + S->front);
printf("del %p : %d\n",(S->base + S->front),*e);
S->front = (S->front + )%MAXQSIZE; return ;
} void PrintQueue(SqQueue *S)
{
int *a = S->base; int front = S->front;
int rear = S->rear; while(front != rear)
{
printf("%d\t",a[front]);
front ++;
} printf("\n"); } void DestoryQueue(SqQueue *S)
{
free(S->base);
} int main(int argc ,char** argv)
{
SqQueue S;
printf("main %p\n",S.base);
InitSqQueue(&S); int i = ;
for(i = ; i < ; i++)
{
InsertQueue(&S,i);
} // PrintQueue(&S); DeleteQueue(&S,&i); // PrintQueue(&S); printf("main %p\n",S.base);
free(S.base);
printf("main %p\n",S.base); //S.base = NULL;
// DestoryQueue(&S);
return ;
}
运行结果如下:
root@ubuntu:/mnt/hgfs/E/Lessons/MyExercise/DS/# ./SqQueue
main 0xe344d5
Init 0x822d008
insert 0x822d008 :
insert 0x822d00c :
insert 0x822d010 :
insert 0x822d014 :
insert 0x822d018 :
insert 0x822d01c :
insert 0x822d020 :
full e: !!!
del 0x822d008 :
insert 0x822d024 :
full e: !!!
del 0x822d00c :
insert 0x822d008 :
full e: !!!
del 0x822d010 :
insert 0x822d00c :
full e: !!!
del 0x822d014 :
insert 0x822d010 :
full e: !!!
del 0x822d018 :
insert 0x822d014 :
full e: !!!
del 0x822d01c :
insert 0x822d018 :
full e: !!!
del 0x822d020 :
insert 0x822d01c :
full e: !!!
del 0x822d024 :
insert 0x822d020 :
full e: !!!
del 0x822d008 :
insert 0x822d024 :
full e: !!!
del 0x822d00c :
insert 0x822d008 :
full e: !!!
del 0x822d010 :
insert 0x822d00c :
full e: !!!
del 0x822d014 :
insert 0x822d010 :
full e: !!!
del 0x822d018 :
insert 0x822d014 :
del 0x822d01c :
main 0x822d008
main 0x822d008
root@ubuntu:/mnt/hgfs/E/Lessons/MyExercise/DS/#
数据结构(C语言版)---第三章栈和队列 3.4.2 队列的链式表示和实现(循环队列)的更多相关文章
- 【数据结构(C语言版)系列二】 栈
栈和队列是两种重要的线性结构.从数据结构角度看,栈和队列也是线性表,但它们是操作受限的线性表,因此,可称为限定性的数据结构.但从数据类型角度看,它们是和线性表大不相同的两类重要的抽象数据类型. 栈的定 ...
- 【数据结构(C语言版)系列三】 队列
队列的定义 队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端删除元素.这和我们日常生活中的排队是一致的,最早进入队列的元素最早离开.在队列中,允许插入的一端叫做队尾(rear),允许 ...
- 为什么我要放弃javaScript数据结构与算法(第三章)—— 栈
有两种结构类似于数组,但在添加和删除元素时更加可控,它们就是栈和队列. 第三章 栈 栈数据结构 栈是一种遵循后进先出(LIFO)原则的有序集合.新添加的或待删除的元素都保存在栈的同一端,称为栈顶,另一 ...
- 数据结构与算法分析——C语言描述 第三章的单链表
数据结构与算法分析--C语言描述 第三章的单链表 很基础的东西.走一遍流程.有人说学编程最简单最笨的方法就是把书上的代码敲一遍.这个我是头文件是照抄的..c源文件自己实现. list.h typede ...
- 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明
<数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑 链接☛☛☛ <数据结构>课本源码合辑 习题集全解析 链接☛☛☛ ...
- c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载
百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ...
- 数据结构(c语言版)文摘
第一章 绪论 数据结构:是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科. 数据:是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理 ...
- 数据结构C语言版 有向图的十字链表存储表示和实现
/*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...
- 数据结构C语言版 表插入排序 静态表
数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P270 编译 ...
- 数据结构C语言版 弗洛伊德算法实现
/* 数据结构C语言版 弗洛伊德算法 P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...
随机推荐
- pl/sql programming 02 创建并运行plsql代码
/* * chap 02 * ------------------------------------------------- */ create or replace function wordc ...
- 基于Flume的美团日志收集系统(二)改进和优化
在<基于Flume的美团日志收集系统(一)架构和设计>中,我们详述了基于Flume的美团日志收集系统的架构设计,以及为什么做这样的设计.在本节中,我们将会讲述在实际部署和使用过程中遇到的问 ...
- sql DROP 和DELETE、TRUNCATE用法
DROP:删除数据库已存在的表DROP TABLE tbname DELETE:删除记录delete from tbname truncate:清空表,重置索引truncate table tbnam ...
- WEBUS2.0 In Action - [源代码] - C#代码搜索器
最近由于工作的需要, 要分析大量C#代码, 在数万个cs文件中搜索特定关键词. 这是一项非常耗时的工作, 用Notepad++要运行接近半个小时. 于是我利用WEBUS2.0 SDK创建了一个代码搜索 ...
- POJ 3308 Paratroopers (对数转换+最小点权覆盖)
题意 敌人侵略r*c的地图.为了消灭敌人,可以在某一行或者某一列安置超级大炮.每一个大炮可以瞬间消灭这一行(或者列)的敌人.安装消灭第i行的大炮消费是ri.安装消灭第j行的大炮消费是ci现在有n个敌人 ...
- ecshop 首页调用指定类产品
方法一.已测试成功 1.在/includes/lib_goods.php最底部增加以下代码 function index_get_cat_id_goods_best_list($cat_id = '' ...
- Heritrix源码分析(八) Heritrix8个处理器(Processor)介绍(转)
本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/643367 本博客已迁移到本人独立博客: http://www.yun5u ...
- T-SQL备忘(3):分组合并
--CREATE TABLE test(code varchar(50), [name] varchar(10),[count] int ) --INSERT test SELECT '001' , ...
- asp.net读取xml方法
这个适合刚学asp.net的同学,大神直接略过好了,asp.net经常会有很多用到XML的地方,比如全国省市的联动,以及一些菜单读取等等都有xml的影子,直接贴代码,以便我以后用到的时候忘了,注释我写 ...
- HEAD
Branches are just pointers to commits Every branch is simply a named pointer to a commit. A special ...