#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 6 typedef int QElemType; typedef struct {
QElemType *base;
int front;
int rear;
}SqQueue; SqQueue *InitQueue(SqQueue* Q);//初始化
SqQueue *DestroyQueue(SqQueue* Q);//销毁
void ClearQueue(SqQueue *Q);//清空
int QueueEmpty(SqQueue *Q);//判空
int QueueLength(SqQueue *Q);//队列长度
QElemType GetHead(SqQueue *Q);//获取队头元素
int EnQueue(SqQueue *Q, QElemType e);//插入新元素到队尾
int DeQueue(SqQueue *Q, QElemType *e);//删除队头元素
void QueueTraverse(SqQueue *Q);//遍历 //初始化
SqQueue *InitQueue(SqQueue* Q){
Q = (SqQueue *)malloc(sizeof(SqQueue));
Q->base = (QElemType *)malloc(sizeof(QElemType)*MAXSIZE);
if(!Q->base){
printf("空间不足,初始化失败\n");
return NULL;
}
Q->front=Q->rear=;
printf("初始化成功\n");
return Q;
} //销毁
SqQueue *DestroyQueue(SqQueue* Q){
free(Q->base);
free(Q);
printf("销毁成功\n");
return NULL;
} //清空
void ClearQueue(SqQueue *Q){
int i=Q->front;
while(i%MAXSIZE != Q->rear){
printf("%d被清空\n",Q->base[i%MAXSIZE]);
Q->base[i%MAXSIZE] = ;
i++;
}
printf("清空成功\n");
} //判空,1为空
int QueueEmpty(SqQueue *Q){
return(Q->rear == Q->front);
} //返回队列长度
int QueueLength(SqQueue *Q){
return (Q->rear-Q->front+MAXSIZE)%MAXSIZE;
} //获取队头元素
QElemType GetHead(SqQueue *Q){
if(Q->front != Q->rear){
printf("队头元素是%d\n", Q->base[Q->front]);
return Q->base[Q->front];
}else{
printf("空队列,无队头\n");
}
} //插入新元素到队尾,返回是否入队成功的状态
int EnQueue(SqQueue *Q, QElemType e){
//判定是否还有一个空
if((Q->rear+)%MAXSIZE == Q->front){
printf("队列已满,%d元素入队失败\n",e);
return ;
}
Q->base[Q->rear] = e;
//插入后尾指针加一
Q->rear = (Q->rear+)%MAXSIZE;
printf("%d入队成功\n", e);
return ;
} //删除队头元素
int DeQueue(SqQueue *Q, QElemType *e){
//判空
if(Q->front==Q->rear){
printf("空队列,删除失败\n");
return ;
}
*e = Q->base[Q->front];
Q->front=(Q->front+)%MAXSIZE;
printf("%d元素出队成功\n", *e);
return ;
} //遍历
void QueueTraverse(SqQueue *Q){
if(QueueEmpty(Q)){
printf("空队列\n");
return;
}
int i=Q->front;
//只要不等于尾指针就一直遍历
while(i%MAXSIZE != Q->rear){
printf("%d ",Q->base[i%MAXSIZE]);
i++;
}
printf("\n");
} int main(void)
{
SqQueue *Q = NULL;
QElemType e = NULL;
//初始化测试
Q = InitQueue(Q); //遍历测试
QueueTraverse(Q); // //入队测试
// EnQueue(Q, 1);
// EnQueue(Q, 2);
// EnQueue(Q, 3);
// EnQueue(Q, 4);
// QueueTraverse(Q); // //长度测试
// printf("队列长度为%d\n",QueueLength(Q));
// EnQueue(Q, 1);
// EnQueue(Q, 2);
// EnQueue(Q, 3);
// EnQueue(Q, 4);
// printf("队列长度为%d\n",QueueLength(Q));
// EnQueue(Q, 5);
// EnQueue(Q, 6);
// printf("队列长度为%d\n",QueueLength(Q)); // //出队测试
// DeQueue(Q, &e);
// printf("测试e是否改变:%d\n",e);
// QueueTraverse(Q); // //获取队头元素测试
// e = GetHead(Q);
// EnQueue(Q, 999);
// e = GetHead(Q); // //出入测试
// EnQueue(Q, 1);
// EnQueue(Q, 3);
// EnQueue(Q, 5);
// EnQueue(Q, 7);
// EnQueue(Q, 9);
// EnQueue(Q, 11);
// QueueTraverse(Q);
// DeQueue(Q, &e);
// DeQueue(Q, &e);
// DeQueue(Q, &e);
// QueueTraverse(Q);
// EnQueue(Q, 7);
// EnQueue(Q, 9);
// EnQueue(Q, 11);
// EnQueue(Q, 13);
// QueueTraverse(Q); // //清空测试
// EnQueue(Q, 7);
// EnQueue(Q, 9);
// EnQueue(Q, 11);
// EnQueue(Q, 13);
// ClearQueue(Q);
// QueueTraverse(Q); //销毁测试
EnQueue(Q, );
EnQueue(Q, );
EnQueue(Q, );
EnQueue(Q, );
Q = DestroyQueue(Q);
QueueTraverse(Q); return ;
}

纯C语言实现顺序队列的更多相关文章

  1. 队列的含义以及C语言实现顺序队列

    队列,和栈一样,也是一种对数据的"存"和"取"有严格要求的线性存储结构. 什么是队列 与栈结构不同的是,队列的两端都"开口",要求数据只能从 ...

  2. 纯C语言实现顺序栈

    #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef int SElemType; typede ...

  3. C语言顺序队列

    顺序队列是一种只能在一头进和另一头出的数据结构,所以结构体里设2个指针分别指向头部和尾部,用数组来存储数据. #define MAXSIZE 1024 typedef int elemtype; ty ...

  4. 数据结构 - 顺序队列的实行(C语言)

    数据结构-顺序队列的实现 1 顺序队列的定义 线性表有顺序存储和链式存储,队列作为一种特殊的线性表,也同样存在这两种存储方式.我们先来看队列的顺序存储结构. 队列的顺序储存结构:用数组存储队列,为了避 ...

  5. 顺序队列与链式队列--C语言实现

    关于队列,因为我自己在平时使用不多,所以在这里直接将队列的两种存储方式放在一起,作为一篇随笔,这两份代码均可直接运行,亲测.注释写的应该也算比较详细了,就不过多的解释了 顺序队列 #include&l ...

  6. C语言实现,队列可伸缩

    两个栈实现一个队列,C语言实现,队列可伸缩,容纳任意数目的元素. 一.思路:1.创建两个空栈A和B:2.A栈作为队列的入口,B栈作为队列的出口:3.入队列操作:即是入栈A:4.出队列操作:若栈B为空, ...

  7. 顺序队列C/C++实现

    #include <iostream> using namespace std; const int MAXSIZE = 1000; typedef int ELEMTYPE; const ...

  8. C语言 串 顺序结构 实现

    一个能够自动扩容的顺序结构的串 ArrString (GCC编译). /** * @brief C语言 串 顺序结构 实现 * @author wid * @date 2013-11-01 * * @ ...

  9. 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列

    一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...

随机推荐

  1. JavaWeb之servlet(2)

    servlet(2) ServletContext servlet的上下文 每个jvm的虚拟机中的每个web工程都只有一个ServletContext工程,即在一个web工程中,无论写了多少个Java ...

  2. 环信即时通讯在工程中的安装——Nusen_Liu

    即时通讯-环信 准备 1.下载SDK http://www.easemob.com/download 2.证书下载上传 后期发送消息 需要推送发送的内容 http://docs.easemob.com ...

  3. Bitbucket与git上传源码的使用方法

    本文链接:https://blog.csdn.net/nomisshe/article/details/19625555 Bitbucket使用方法   一.软件及SSH keys: 由于我的Bitb ...

  4. ACM-ICPC 2018 沈阳赛区网络预赛 J. Ka Chang(树上分块+dfs序+线段树)

    题意 链接:https://nanti.jisuanke.com/t/A1998 给出一个有根树(根是1),有n个结点.初始的时候每个结点的值都是0.下面有q个操作,操作有两种,操作1.将深度为L(根 ...

  5. 8.Java基础_if-else和switch选择语句

    /* 选择语句(基本与C++相同) if-else语句: 格式一: if(关系式){ 语句体; } 格式二: if(关系式){ 语句体; } else{ 语句体; } 格式三: if(关系式){ 语句 ...

  6. selenium五十行代码自动化爬取淘宝

    先看一下代码,真的只是五十行: # coding=gbk from selenium import webdriver import time options = webdriver.ChromeOp ...

  7. python3.5.3rc1学习七:多线程

    import threading def exampleFun(): #打印当前激活的线程数量 print(threading.active_count) #查看上面激活的线程是哪几个 print(t ...

  8. [C1W2] Neural Networks and Deep Learning - Basics of Neural Network programming

    第二周:神经网络的编程基础(Basics of Neural Network programming) 二分类(Binary Classification) 这周我们将学习神经网络的基础知识,其中需要 ...

  9. 数据库连接池 DBUtils:

    import pymysqlfrom DBUtils.PooledDB import PooledDB, SharedDBConnectionPOOL = PooledDB ( creator=pym ...

  10. Shiro内置过滤器

    Shiro内置过滤器 DefaultFilter 枚举类定义了shiro所有的默认过滤器. package org.apache.shiro.web.filter.mgt; public enum D ...