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

源码如下:

#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. bzoj2396: 神奇的矩阵

    与51nod1140一样.不过这题是多组数据的...坑.... #include<cstdio> #include<cstring> #include<cctype> ...

  2. fixed兼容IE6

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. Codeforces 505 A Mr. Kitayuta's Gift【暴力】

    题意:给出一个字符串,可以向该字符串的任意位置插入一个字母使其变成回文串 因为字符串的长度小于10,枚举插入的字母,和要插入的位置,再判断是否已经满足回文串 #include<iostream& ...

  4. VS2010 需要缺少的web组件才能加载该项目

    到的问题是解决方案中部分项目无法加载, 提示需要缺少的web组件才能加载该项目,是否通过WEB安装组件来网络安装, 点击确定以后就什么也没有了. 到微软网站去下载Microsoft Web Platf ...

  5. ubuntu16.04 64位server安装php7

    You can do the following: sudo apt-get install python-software-properties sudo LC_ALL=C.UTF-8 add-ap ...

  6. 如何拷贝CMD命令行文本到粘贴板

    /********************************************************************* * 如何拷贝CMD命令行文本到粘贴板 * To copy ...

  7. acdream 1682 吃不完的糖果(环形最大子段和)

    Problem Description 娜娜好不容易才在你的帮助下"跳"过了这个湖,果然车到山前必有路,大战之后必有回复,大难不死,必有后福!现在在娜娜面前的就是好多好多的糖果还有 ...

  8. 使用过的Linux命令

    1 在vim中编辑python,由于tab是8个空格,然而python中是4个,需要替换 :%s/\t/    /g 2 tar tar -czvf topic_dt_poi.0801.0818.ta ...

  9. HDU 产生冠军 2094

    解题思路:这题重在分析,可能你知道的越多,这题想得越多,什么并查集,什么有向图等. 事实是,我们会发现,只要找到一个,并且仅有一个的入度为0的点,说明可以找出   冠军.若入度为0的点一个都没有,说明 ...

  10. [转] gc tips(1)

    所有应用软件都需要管理内存,一个应用软件的内存管理系统包括了如下准则:什么时候派发内存,要派发多少内存,什么时候把东西放到回收站,以及什么时候清空回收站.MMgc是Flash Player几乎所有内存 ...