1、数据结构-循环队列的实现-C语言

#define MAXSIZE 100
//循环队列的存储结构
typedef struct
{
    int* base;     //基地址
    int _front;    //头指针
    int _rear;     //尾指针
} SqQueue;

//构造空队列---1
void InitQueue(SqQueue* Q);
//队列的销毁---2
void DestroyQueue(SqQueue* Q);
//队列的清空---3
void ClearQueue(SqQueue* Q);
//判断队列是否为空---4
void QueueEmpty(SqQueue Q);
//队列的长度---5
int QueueLength(SqQueue Q);
//取队列头元素---6
void GetHead(SqQueue Q);
//插入---7
void EnQueue(SqQueue* Q, int value);
//删除---8
void DeQueue(SqQueue* Q,int* value);
//依次访问队列元素---9
void QueueTraverse(SqQueue Q);
void ShowHelp();

//-----------------------------------------------

void ShowHelp()
{
    printf("1---初始化循环队列\n");
    printf("2---销毁循环队列\n");
    printf("3---清空循环队列\n");
    printf("4---判断循环队列是否为空\n");
    printf("5---循环队列长度\n");
    printf("6---循环队列头元素\n");
    printf("7---插入\n");
    printf("8---删除\n");
    printf("9---依次访问循环队列元素\n");
}

void InitQueue(SqQueue* Q)
{
    Q->base = (SqQueue*) malloc(MAXSIZE*sizeof(SqQueue));
    if(!Q->base)
    {
        printf("分配失败.\n");
        return;
    }
    Q->_rear = 0;
    Q->_front = 0;
}

void DestroyQueue(SqQueue* Q)
{
    free(Q->base);
    Q->_rear = 0;
    Q->_front = 0;
}

void ClearQueue(SqQueue* Q)
{
    //并不需要free占值的空间,因为就是不free,本身分配的也有空间。都是占着的。
    Q->_rear = 0;
    Q->_front = 0;
}

void QueueEmpty(SqQueue Q)
{
    if(Q._rear == Q._front)
        printf("此队列为空。\n");
    else
        printf("此队列不为空。\n");
}

int QueueLength(SqQueue Q)
{
    return (Q._rear-Q._front+MAXSIZE)%MAXSIZE;
}

void GetHead(SqQueue Q)
{
    if(Q._rear == Q._front)
    {
        printf("此队列为空。\n");
        return;
    }
    int* middle = Q.base;
    middle += Q._front;
    printf("此队列头元素为%d。\n",*middle);
}

void EnQueue(SqQueue* Q, int value)
{
    if(((Q->_rear+1)%MAXSIZE) == Q->_front)
    {
        printf("队列中元素已满,不能再继续添加.\n");
        return;
    }
    int* middle = Q->base;
    middle += Q->_rear;
    *(middle) = value;
    Q->_rear = (Q->_rear+1)%MAXSIZE;
    printf("插入成功\n");
}

void DeQueue(SqQueue* Q,int* value)
{
    if(Q->_rear == Q->_front)
    {
        printf("队列中无元素,不能再进行出队列操作.\n");
        return;
    }
    int* middle = Q->base;
    middle += Q->_front;
    *value = *(middle);
    Q->_front = (Q->_front+1)%MAXSIZE;
    printf("删除成功\n");
}

void QueueTraverse(SqQueue Q)
{
    if(Q._rear == Q._front){
        printf("此队列为空。\n");
        return;
    }
    int* middle = Q.base;
    middle += Q._front;
    int num = 1;
    for(int i=0;i<((Q._rear-Q._front+MAXSIZE)%MAXSIZE);i++){
        printf("第%d个元素值为:%d\n",num,*(middle+i));
        num++;
    }
}

C语言数据结构-循环队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作的更多相关文章

  1. C语言数据结构-单链表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作

    1.数据结构-单链表的实现-C语言 typedef struct LNode { int data; struct LNode* next; } LNode,*LinkList; //这两者等价.Li ...

  2. C语言实现循环队列的初始化&进队&出队&读取队头元素&判空-2

    /*顺序表实现队列的一系列操作(设置flag标志不损失数组空间)*/ #include<stdio.h> #include<stdlib.h> #define Queue_Si ...

  3. C语言数据结构-链式队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作

    1.数据结构-链式队列的实现-C语言 typedef struct QNode { int data; struct QNode *next; }QNode,*QueuePtr; typedef st ...

  4. C语言数据结构-队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作

    1.数据结构-队列的实现-C语言 //队列的存储结构 #define MAXSIZE 100 typedef struct { int* base; //基地址 int _front; //头指针 i ...

  5. c语言数据结构:用标志位实现循环队列

    #include<stdio.h> #include<stdlib.h> #define MAXSIZE 10//定义队列长度 ;//定义标志位 typedef struct ...

  6. C语言数据结构——第三章 栈和队列

    三.栈和队列 栈和队列是两种重要的线性结构.从数据结构的角度来看,栈和队列也是线性表,它的特殊性在于栈和队列的基本操作是线性表操作的子集,它们的操作相对于线性表来说是受到限制的,因此,可以称其为限定性 ...

  7. C语言数据结构-顺序线性表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作

    1.数据结构-顺序线性表的实现-C语言 #define MAXSIZE 100 //结构体定义 typedef struct { int *elem; //基地址 int length; //结构体当 ...

  8. Java数据结构——循环队列

    普通顺序队列存在的问题在普通顺序队列中,入队的操作就是先将尾指针rear右移一个单位,然后将元素值赋值给rear单位.出队时,则是头指针front后移一个单位.像这样进行了一定数量的入队和出队操作后, ...

  9. C语言数据结构基础学习笔记——栈和队列

    之前我们学过了普通的线性表,接下来我们来了解一下两种特殊的线性表——栈和队列. 栈是只允许在一端进行插入或删除的线性表. 栈的顺序存储结构也叫作顺序栈,对于栈顶指针top,当栈为空栈时,top=-1: ...

随机推荐

  1. Angular常犯的错误

    ng-app="name名称" name名称  == 一定要写对 其次 angular.min导入一定要正确,一定要导入正确的angular.min的库 再次js中要写自调用 (f ...

  2. Windows下自由创建.htaccess文件的N种方法

    .htaccess是apache的访问控制文件,apache中httpd.conf的选项配合此文件,完美实现了目录.站点的访问控 制,当然最多的还是rewrite功能,即URL重写,PHP中实现伪静态 ...

  3. SPARC T4 RAID Setup (ZT)

    http://www.confignotes.com/2013/09/sparc-t4-raid-setup/ How to configure a RAID volume with the inte ...

  4. docker 笔记 (5)常用命令

    images    显示镜像列表 history   显示镜像构建历史 commit    从容器创建新镜像 build     从 Dockerfile 构建镜像 tag       给镜像打 ta ...

  5. C语言学习笔记--函数与指针

    1. 函数类型 (1)C 语言中的函数有自己特定的类型,这个类型由返回值.参数类型和参数个数共同决定.如 int add(int i,int j)的类型为 int(int,int). (2)C 语言中 ...

  6. DAY10-MYSQL初识

    一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件 ...

  7. 浅谈时钟的生成(js手写代码)(非原创)

    在生成时钟的过程中自己想到布置表盘的写法由这么几种: 当然利用那种模式都可以实现,所以我们要用一个最好理解,代码有相对简便的方法实现 1.利用三角函数 用js在三角函数布置表盘的过程中有遇见到这种情况 ...

  8. [Python Study Notes]pd.read_csv()函数读取csv文件绘图

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  9. 【转】TinyMCE(富文本编辑器)

    效果预览:http://www.tinymce.com/tryit/full.php [转]TinyMCE(富文本编辑器)在Asp.Net中的使用方法 转自:http://www.cnblogs.co ...

  10. Codeforces 1142D(dp)

    题目传送 先给出设计dp的结论: dp[i][j]:以第i个位置.以rankj的数拓展出去的方案数.意会一下,我实在想不好语言-- 其中所谓rankj=真·rank%11 找到拓展的规律,转移也就顺理 ...