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()
{
    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;
}

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 == MAXSIZE)
    {
        printf("要假溢出,不能再继续添加.\n");
        return;
    }
    int* middle = Q->base;
    middle += Q->_rear;
    *(middle) = value;
    Q->_rear ++;
    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 ++;
    printf("删除成功\n");
}

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

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

  1. SDUT OJ 数据结构实验之链表七:单链表中重复元素的删除

    数据结构实验之链表七:单链表中重复元素的删除 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem ...

  2. SDUT-2122_数据结构实验之链表七:单链表中重复元素的删除

    数据结构实验之链表七:单链表中重复元素的删除 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 按照数据输入的相反顺序(逆 ...

  3. C语言数据结构-链式栈的实现-初始化、销毁、长度、取栈顶元素、查找、入栈、出栈、显示操作

    1.数据结构-链式栈的实现-C语言 //链式栈的链式结构 typedef struct StackNode { int data; struct StackNode *next; } StackNod ...

  4. C语言数据结构-栈的实现-初始化、销毁、长度、取栈顶元素、查找、入栈、出栈、显示操作

    1.数据结构-栈的实现-C语言 #define MAXSIZE 100 //栈的存储结构 typedef struct { int* base; //栈底指针 int* top; //栈顶指针 int ...

  5. 数据结构实验之链表七:单链表中重复元素的删除(SDUT 2122)

    #include <bits/stdc++.h> using namespace std; typedef struct node { int data; struct node* nex ...

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

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

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

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

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

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

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

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

随机推荐

  1. 数据库:ubantu下MySQL安装指南

    http://wiki.ubuntu.org.cn/MySQL%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97 安装MySQL sudo apt-get install mys ...

  2. javascript——对象的概念——创建对象与销毁对象

    一.创建对象 1.创建空对象 方式一: var o ={};o; //Object {} typeof(o); //"object" 方式二: var o=new Object() ...

  3. 安卓如何将TXT文件写到特定路径

    其实就一个方法,就不贴所有代码了. /** * 写入文件方法 * @param content */ public static void write(String content) { try { ...

  4. JS写一个简单的程序,输入两个整数,打印这两个数的和,差,积,余数

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. html乱码原因与网页乱码解决方法

    造成html网页乱码原因主要是html源代码内中文字内容与html编码不同造成.但无论是哪种情况造成乱码在网页开始时候都需要设置网页编码. charset编码设置 html网页乱码效果截图 一.乱码造 ...

  6. ReactNative安装配置

    1.安装jdk1.8,配置好path, javac,java -version 2.安装设置Android sdk a. 解压:D:\www\sdk\adt-bundle-windows-x86_64 ...

  7. ==, equals, hashcode的理解

    一.java对象的比较 等号(==): 对比对象实例的内存地址(也即对象实例的ID),来判断是否是同一对象实例:又可以说是判断对象实例是否物理相等: equals(): 对比两个对象实例是否相等. 当 ...

  8. Luogu 2824 [HEOI2016/TJOI2016]排序

    BZOJ 4552 挺妙的解法. 听说这题直接用一个桶能拿到$80 \ pts$ 发现如果是一个排列的话,要对这个序列排序并不好做,但是假如是$01$序列的话,要对一个区间排序还是很简单的. 发现最后 ...

  9. Google B4网络阅读记录(翻译)

    3.设计 这一章我们描述软件定义广域网架构的细节. 3.1.概述 我们的软件定义网络从逻辑上可以看做三层,如图所示, B4服务于多个广域网节点,每个节点都有很多服务器集群.在每个B4节点内,交换机硬件 ...

  10. 使用Notepad++与Dev_c++编译

    1. 安装Dev.打开DEV安装目录下的 D:\app\DevCpp\Dev-Cpp\MinGW64\bin(因人而异). 2.添加环境变量,测试. 将上述路径D:\app\DevCpp\Dev-Cp ...