队列的基本概念及其描述

队列是一种特殊的线性表,它的特殊性在于队列的插入和删除操作分别在表的两端进行。

插入的那一端称为队尾,删除的那一端称为队首。队列的插入操作和删除操作分别称为进队出队

先进先出(First In First Out)

顺序队列要掌握以下操作:

1、队列的初始化

2、判断队列是否为空

3、打印队列的节点值

4、取得队列的队首节点值

5、队列的插入操作(从队尾插入)

6、队列的删除操作(从队首删除)

运行环境:Code::Blocks 17.12

下面是头文件

#ifndef SEQQUEUE_H_INCLUDED
#define SEQQUEUE_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef int datatype;
typedef struct
{datatype a[MAXSIZE];int front_;int rear_;
}sequence_queue;//队列(顺序存储)初始化
void init(sequence_queue *sq)
{sq->front_=0;sq->rear_=0;
}//判断队列(顺序存储)是否为空
int isempty(sequence_queue sq)
{return (sq.front_==sq.rear_?1:0);//是空的话返回1
}//打印队列的节点值
void display(sequence_queue sq)
{int i;if (isempty(sq)){printf("\n该队列是空的!\n\n");}else{for(i=sq.front_;i<sq.rear_;i++){printf("%5d",sq.a[i]);}}
}//取得队列(顺序储存)的队首节点值
datatype get(sequence_queue sq)
{if(isempty(sq)){printf("\n该队列是空的,无法获得队首节点值。\n\n");exit(1);}return sq.a[sq.front_];
}//队列(顺序储存)的插入操作
void insert_(sequence_queue *sq,datatype x)
{if(sq->rear_==MAXSIZE){printf("\n该队列是满的\n");}else{sq->a[sq->rear_]=x;sq->rear_++;printf("\n插入成功!\n\n");}
}//队列(顺序储存)的删除操作
void del(sequence_queue *sq)
{if(sq->front_==sq->rear_){printf("\n该队列是空的不能进行删除操作!\n\n");}else{sq->front_++;printf("删除成功!\n\n");}
}void menu()
{printf("\t|===================================|\t\n");printf("\t|                                   |\t\n");printf("\t|        顺序队列及其实现           |\t\n");printf("\t|                                   |\t\n");printf("\t|===================================|\t\n");printf("\t|有如下选项:                        |\t\n");printf("\t|===================================|\t\n");printf("\t|【1】队列的初始化                  |\t\n");printf("\t|【2】判断队列是否为空              |\t\n");printf("\t|【3】打印队列的节点值              |\t\n");printf("\t|【4】取得队列的队首节点值          |\t\n");printf("\t|【5】队列的插入操作                |\t\n");printf("\t|【6】队列的删除操作                |\t\n");printf("\t|===================================|\t\n");printf("\t|Ctrl+C结束该程序!!!             |\t\n");printf("\t|===================================|\t\n");
}
#endif // SEQQUEUE_H_INCLUDED

下面是主程序

#include <stdio.h>
#include "seqqueue.h"
int main ()
{int a,i,k;sequence_queue sq;init(&sq);while(1){menu();printf("请输入你的选择:");scanf("%d",&a);switch(a){case 1:{init(&sq);printf("已成功初始化一个队列!\n\n");break;}case 2:{if(isempty(sq)){printf("该队列为空!\n\n");}else{printf("该队列不为空!\n\n");}break;}case 3:{display(sq);printf("\n已成功打印队列的节点值!\n\n");break;}case 4:{printf("%d",get(sq));break;}case 5:{printf("请输入一个想要插入的数:");scanf("%d",&a);insert_(&sq,a);break;}case 6:{del(&sq);break;}}}return 0;
}

【数据结构】顺序队列的实现(C语言)相关推荐

  1. 数据结构-顺序表基本操作(C语言实现)

    参考书:王道考研数据结构 //函数的声明 SqList InitList(l);                                    //初始化一个顺序表 void PrintfLi ...

  2. 顺序表倒置java_数据结构-顺序表 java实现-Go语言中文社区

    知识点 线性表的顺序结构存储结构简称为顺序表. 线性表逻辑顺序相邻,顺序表存储位置相邻. 便于随机存取. 删除和插入可能要移动大量元素,效率低. 解决溢出的方法是新建另一个大容量数组,效率低. 实现 ...

  3. (c语言数据结构)用顺序队列的方式实现输入12345,输出12345操作——期末数据结构程序设计

    用顺序队列的方式实现输入123456,输出12345操作 文章目录 用顺序队列的方式实现输入123456,输出12345操作 1.队列的定义 2.队列的初始化 3.判空操作 4.入队操作 5. 出队操 ...

  4. 数据结构源码笔记(C语言):Josephus问题之顺序表

    /*josephus_seq.c*/ /*Josephus问题: 顺序表实现*/#include <stdio.h> #include <stdlib.h>#define FA ...

  5. 数据结构源码笔记(C语言):链接队列

    /* LinkQueue.c*/ /*链接队列:函数实现*/#include <stdio.h> #include <stdlib.h>typedef int DataType ...

  6. 数据结构源码笔记(C语言):线性表的顺序表示

    /* SeqList.c*/ /*线性表的顺序表示:函数实现*/#include <stdio.h> #include <stdlib.h> //#include " ...

  7. 数据结构源码笔记(C语言):顺序查找

    //实现顺序查找的算法 #include<stdio.h> #include<malloc.h> #include<malloc.h>#define MAXL 10 ...

  8. 数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)...

    还记得数据结构这个经典的分类图吧: 今天主要关注一下线性表. 什么是线性表 线性表的划分是从数据的逻辑结构上进行的.线性指的是在数据的逻辑结构上是线性的.即在数据元素的非空有限集中 (1) 存在唯一的 ...

  9. 数据结构——链式队列解析(C语言版)

    摘自:数据结构学习--链式队列解析(C语言版) 作者:正弦定理 发布时间:2020-11-26 21:07:08 网址:https://blog.csdn.net/chinesekobe/articl ...

最新文章

  1. 网站外链的存在有什么作用呢?
  2. 长安大学微型计算机原理与接口技术答案,长安大学微机原理与接口技术A卷答案...
  3. MATLAB Simulink如何实现S-Function builder功能
  4. android之SharedPreferences
  5. [MVC学习笔记]5.使用Controller来代替Filter完成登录验证(Session校验)
  6. 台式计算机欢迎界面下不去,Win7系统开机不显示欢迎界面的方法
  7. io密集型和cpu密集型_和小胖一起理解CPU负载和利用率
  8. MySQL单表数据不要超过500万行:是经验数值,还是黄金铁律?
  9. c语言api文档_初学 C 语言没有项目练手?这 20 个小项目拿走不谢
  10. JavaScript.Remove
  11. Baumer相机Error Codes
  12. ros之旋转加平移公式
  13. 阿里云云计算 34 RDS的概念
  14. PPT 最后一页写什么结束语既得体又能瞬间提升格调?
  15. Redis 与 Mysql 的数据一致性
  16. 列举5种常见的计算机硬件主要有哪些,计算机硬件组成有哪些
  17. 黑马程序员《JavaWeb程序设计案例教程》_课后习题答案
  18. 日本人为什么不吃小龙虾!
  19. 专精特新企业认定条件 这些条件要满足
  20. gtx1660是什么级别的_GTX1660显卡首测:1060终于可以退休了!

热门文章

  1. 用Git上传删除本地项目到gitlab---图文解析
  2. zookeeper脑裂
  3. Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件...
  4. super的用法(带了解)
  5. PHP文件上传和文件操作案例
  6. StarUML中时序图添加小人
  7. 【VMCloud云平台】SCCM(四)域内推送代理
  8. 正则表达式实现最小匹配
  9. php 能打印一个没有实例化的类_你理解 PHP 中的静态方法吗?
  10. fig r函数_R语言基础绘图函数散点图~跟着Nature Communications学画图~Figure1