这个是循环队列的实现,至于串及数组这两章,等有空再看,下面将学习树。

源码如下:

#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 队列的链式表示和实现(循环队列)的更多相关文章

  1. 【数据结构(C语言版)系列二】 栈

    栈和队列是两种重要的线性结构.从数据结构角度看,栈和队列也是线性表,但它们是操作受限的线性表,因此,可称为限定性的数据结构.但从数据类型角度看,它们是和线性表大不相同的两类重要的抽象数据类型. 栈的定 ...

  2. 【数据结构(C语言版)系列三】 队列

    队列的定义 队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端删除元素.这和我们日常生活中的排队是一致的,最早进入队列的元素最早离开.在队列中,允许插入的一端叫做队尾(rear),允许 ...

  3. 为什么我要放弃javaScript数据结构与算法(第三章)—— 栈

    有两种结构类似于数组,但在添加和删除元素时更加可控,它们就是栈和队列. 第三章 栈 栈数据结构 栈是一种遵循后进先出(LIFO)原则的有序集合.新添加的或待删除的元素都保存在栈的同一端,称为栈顶,另一 ...

  4. 数据结构与算法分析——C语言描述 第三章的单链表

    数据结构与算法分析--C语言描述 第三章的单链表 很基础的东西.走一遍流程.有人说学编程最简单最笨的方法就是把书上的代码敲一遍.这个我是头文件是照抄的..c源文件自己实现. list.h typede ...

  5. 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明

    <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑  链接☛☛☛ <数据结构>课本源码合辑 习题集全解析  链接☛☛☛  ...

  6. c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ...

  7. 数据结构(c语言版)文摘

    第一章  绪论 数据结构:是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科. 数据:是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理 ...

  8. 数据结构C语言版 有向图的十字链表存储表示和实现

    /*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...

  9. 数据结构C语言版 表插入排序 静态表

    数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./*  数据结构C语言版 表插入排序  算法10.3 P267-P270  编译 ...

  10. 数据结构C语言版 弗洛伊德算法实现

    /* 数据结构C语言版 弗洛伊德算法  P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...

随机推荐

  1. 1343. Fairy Tale

    1343 想了好一会 以为会有什么定理呢 没想到 就试着搜了 看来素数还是很多的 跑的飞快 注意会有前导0的情况 还有0,1不是素数... #include <iostream> #inc ...

  2. .NET Framework 4.5 五个很棒的特性

    转自http://news.cnblogs.com/n/192958/ 英文原文:Five Great .NET Framework 4.5 Features 简介 自 .NET 4.5 发布已经过了 ...

  3. tc srm 636 div2 500

    100的数据直接暴力就行,想多了... ac的代码: #include <iostream> #include <cstdio> #include <cstring> ...

  4. poj 1050(DP)

    最大子矩阵和.类似于子序列最大和. // File Name: 1050.cpp // Author: Missa_Chen // Created Time: 2013年06月22日 星期六 17时0 ...

  5. 【笨嘴拙舌WINDOWS】GDI(1)

    GDI:Graphics Device Interface 图形设备接口. 操作系统从命令行界面到图形界面的过度是施乐公司实验室对计算机普及作出的不可估量的贡献,苹果公司乔布斯与微软公司比尔盖茨对其的 ...

  6. Qt之显示网络图片

    简述 Qt中包含了网络模块-network,我们可以很容易的进行各种网络编程和数据传输,关于network的类很多,其中包含:支持DNS.HTTP.TCP/UDP等众多高级类,可以参考助手. 下面我们 ...

  7. Codeforces 443 B Kolya and Tandem Repeat【暴力】

    题意:给出一个字符串,给出k,可以向该字符串尾部添加k个字符串,求最长的连续重复两次的子串 没有想出来= =不知道最后添加的那k个字符应该怎么处理 后来看了题解,可以先把这k个字符填成'*',再暴力枚 ...

  8. .net remoting 客户端与服务端绑定事件,一部电脑当服务器,另一部当客户端,发布后没法接收远程错误信息。

    可以是用下面代码抛出远程错误,客户端和服务端都要设置,因为服务端事件回调时角色变成了远程客户端了. RemotingConfiguration.CustomErrorsMode = CustomErr ...

  9. Hadoop学习总结之二:HDFS读写过程解析

    一.文件的打开 1.1.客户端 HDFS打开一个文件,需要在客户端调用DistributedFileSystem.open(Path f, int bufferSize),其实现为: public F ...

  10. myeclipse9 struts2配置

    引用struts2所用到的jar web.xml配置如下 <?xml version="1.0" encoding="UTF-8"?> <we ...