队列的基本操作(入队、出队、清空……)

SqQue.h

#ifndef __SQQUE_H__
#define __SQQUE_h__
typedef int element;
typedef struct SqQue
{element *data;         //动态定义存储空间大小int max_len;            //存放最多的存储元素个数int now_len;           //当前存放的元素个数int rear;                //队尾下标,下一个入队元素的下标int front;              //队头下标,下一个出队元素的下标
}SqQue;/*功能:初始化顺序队列参数:@maxl:最大长度
*/
SqQue *InitSqQue(int maxl);/*功能:清空顺序栈参数:头指针
*/
void clearSqQue(SqQue *q);/*功能:销毁顺序队列参数:头指针
*/
void destroySqQue(SqQue *q);/*功能:判断顺序队列是否为空参数:头指针返回值:1--成功;0--失败
*/
int SqQueisempty(SqQue *q);/*功能:求队列的长度参数:头指针返回值:队列的长度
*/
int SqQuelength(SqQue *q);/*功能:入队参数:@*q:头指针;@x:入队的元素返回值:1--成功;0--失败
*/
int SqQuein(SqQue *q);/*功能:出队参数:头指针;存放出队元素返回值:1--成功;0--失败
*/
int SqQue(SqQue *q,element *x);/*功能:获取队头元素,但不出队参数:头指针;存放队头元素返回值:1--成功;0--失败
*/
int getSqQue(SqQue *q,element *x);
#endif

SqQue.c

#include<stdio.h>
#include<stdlib.h>
#include "SqQue.c"/*功能:初始化顺序队列参数:@maxl:最大长度
*/
SqQue *InitSqQue(int maxl)
{SqQue *q = malloc(sizeof(*q));q->data = malloc(sizeof(element) * maxl);q->max_len = maxl;q->now_len = 0;q->rear = 0;q->front = 0;return q;
} /*功能:清空顺序队列参数:头指针
*/
void clearSqQue(SqQue *q)
{if(q == NULL){return;}q->now_len = 0;q->rear = 0;q->front = 0;return;
}/*功能:销毁顺序队列参数:头指针
*/
void destroySqQue(SqQue *q)
{if(q == NULL){return;}free(q->data);free(q);return;
}/*功能:判断顺序队列是否为空参数:头指针返回值:1--成功;0--失败
*/
int SqQueisempty(SqQue *q)
{if(q == NULL || q->now_len == 0){return 1;}return 0;
}/*功能:求队列的长度参数:头指针返回值:队列的长度
*/
int SqQuelength(SqQue *q)
{if(q == NULL || q->now_len == 0){return 0;}return q->now_len;
}/*功能:入队参数:@*q:头指针;@x:入队的元素返回值:1--成功;0--失败
*/
int SqQuein(SqQue *q)
{if(q == NULL || q->now_len == q->max_len){return 0;}q->data[q->rear++] = x;q->rear = q->rear % q->max_len;q->now_len++;return 1;
}/*功能:出队参数:头指针;存放出队元素返回值:1--成功;0--失败
*/
int SqQue(SqQue *q,element *x)
{if(q == NULL || q->now_len == 0){return 0;}*x = q->data[q->front++];printf("出队元素为:%d\n",*x);q->front = q->front % q->max_len;q->now_len--;return1;
}/*功能:获取队头元素,但不出队参数:头指针;存放队头元素返回值:1--成功;0--失败
*/
int getSqQue(SqQue *q,element *x)
{if(q == NULL || q->now_len == 0){return 0;}*x = q->data[q->front];printf("队头元素为:%d\n",*x);return 1;
}

main.c

#include<stdio.h>
#include<stdlib.h>
#include "SqQue.h"int main()
{int maxl,x,i;printf("请输入最大长度:\n");scanf("%d",&maxl);SqQue *q = InitSqQue(maxl);printf("请输入队列元素:\n");for(i = 0;i < maxl;i++){scanf("%d",&x);SqQuein(q,x);}SqQueout(q,&x);getSqQue(q,&x);int m = SqQueisEmpty(q);printf("%d\n",m);clearSqQue(q);int n = SqQueisEmpty(q);printf("%d\n",n);return 0;
}

链式队列

LinkQue.h

#ifndef __LINKQUE_h__
#define __LINKQUE_h__typedef int element;typedef struct QNode           //数据结点
{element data;struct QNode *next;struct QNode *prev;}QNode;typedef struct Qlink         //头结点
{QNode *front;QNode *rear;element Nodenum;
}LinkQue;/*功能:初始化链式队列返回值:头指针
*/
LinkQue *InitLinkQue(void);/*功能:清空链式队列参数:头指针
*/
void clearLinkQue(LinkQue *q);/*功能:销毁链式队列参数:头指针
*/
void destroyLinkQue(LinkQue *q);/*功能:判断链式队列是否为空参数:头指针
*/
int LinkQueisempty(LinkQue *q);/*功能:求链式队列的长度参数:头指针返回值:队列长度
*/
int LinkQueLenth(LinkQue *q);/*功能:入队参数:@q:头指针;@x:入队的数据返回值:1--成功;0--失败
*/
int LinkQuein(LinkQue *q,element x);/*功能:出队参数:@q:头指针;@*x:出队数据存放位置返回值:1--成功;0--失败
*/
int LinkQueout(LinkQue *q,element *e);/*功能:获取队头元素参数:@q:头指针;@*x:数据存放位置返回值:1--成功;0--失败
*/
int GetHead(LinkQue *q, element *e);#endif#ifndef __SQQUE_H__
#define __SQQUE_H__
typedef int element;typedef struct SqQue
{element *data;         //动态定义存储空间大小int max_len;        //存放最多的元素个数int now_len;     //当前的元素个数int rear;          //队尾下标,下一个入队元素的下标int front;          //队头下标,下一个出队元素的下标}SqQue;/*功能:初始化队列参数:@maxl:最大长度返回值:顺序队列的头指针
*/
SqQue *InitSqQue(int maxl);/*功能:清空顺序队列参数:头指针
*/
void clearSqQue(SqQue *q);/*功能:销毁顺序队列参数:头指针
*/
void destroySqQue(SqQue *q);/*功能:判断顺序队列是否为空参数:头指针返回值:1--成功;0--失败
*/
int SqQueisEmpty(SqQue *q);/*功能:求队列的长度参数:头指针返回值:队列的长度
*/
int SqQuelenth(SqQue *q);/*功能:入队参数:头指针;入队的元素返回值:1--成功;0--失败
*/
int SqQuein(SqQue *q,element x);/*功能:出队参数:头指针;存放出队元素返回值:1--成功;0--失败
*/
int SqQueout(SqQue *q,element *x);/*功能:获取队头元素,但不出队参数:头指针;存放队头元素返回值:1--成功;0--失败
*/
int getSqQue(SqQue *q,element *x);#endif

LinkQue.c

#include<stdio.h>
#include<stdlib.h>
#include "LinkQue.h"/*功能:初始化链式队列返回值:头指针
*/
LinkQue *InitLinkQue(void)
{LinkQue * q = malloc(sizeof(*q));q->front = NULL;q->rear = NULL;q->Nodenum = 0;return q;
}/*功能:清空链式队列参数:头指针
*/
void clearLinkQue(LinkQue *q)
{if(q == NULL){return;}QNode *p = q->front;while(p){q->front = p->next;if(p->next){p->next->prev = NULL;}p->next = NULL;free(p);p = q->front;}q->rear = NULL;q->Nodenum = 0;return;
}/*功能:销毁链式队列参数:头指针
*/
void destroyLinkQue(LinkQue *q)
{if(q == NULL){return;}clearLinkQue(q);free(q);
}/*功能:判断链式队列是否为空参数:头指针
*/
int LinkQueisempty(LinkQue *q)
{if(q == NULL || q->Nodenum == 0){return 1;}return 0;
}/*功能:求链式队列的长度参数:头指针返回值:队列长度
*/
int LinkQueLenth(LinkQue *q)
{if(q == NULL || q->Nodenum == 0){return 0;}return q->Nodenum;
}/*功能:入队参数:@q:头指针;@x:入队的数据返回值:1--成功;0--失败
*/
int LinkQuein(LinkQue *q,element x)
{if(q == NULL){return 0;}QNode *p = malloc(sizeof(*p));p->data = x;p->next = NULL;p->prev = NULL;if(q->front == NULL){q->front = p;q->rear = p;}else{q->rear->next = p;p->prev = q->rear;q->rear = p;}q->Nodenum++;return 1;
}/*功能:出队参数:@q:头指针;@*x:出队数据存放位置返回值:1--成功;0--失败
*/
int LinkQueout(LinkQue *q,element *e)
{if(q == NULL || q->Nodenum == 0){return 0;}*e = q->front->data;printf("出队元素:%d\n",*e);QNode *p = q->front;q->front = p->next;if(p->next){p->next->prev = NULL;p->next = NULL;free(p);} else{q->rear = NULL;free(p);}q->Nodenum--;return 1;
}/*功能:获取队头元素参数:@q:头指针;@*x:数据存放位置返回值:1--成功;0--失败
*/
int GetHead(LinkQue *q, element *e)
{if (q == NULL || q->front == NULL){return 0;}*e = q->front->data; printf("队首元素:%d\n",*e);return 1;
}

main.c

#include<stdio.h>
#include<stdlib.h>
#include "LinkQue.h"int main()
{element x,e;LinkQue *q = InitLinkQue();printf("请输入入队数据:\n");while(1){scanf("%d",&x);if(x == 0){break;}LinkQuein(q,x);}GetHead(q,&x);int n = LinkQueLenth(q);printf("长度是:%d\n",n);LinkQueout(q,&x);n = LinkQueLenth(q);printf("长度是:%d\n",n);GetHead(q,&x);int m = LinkQueisempty(q);printf("%d\n",m);clearLinkQue(q);n = LinkQueLenth(q);printf("长度是:%d\n",n);m = LinkQueisempty(q);printf("%d\n",m);return 0;
}

队列的基本操作(入队、出队、清空……)相关推荐

  1. 队列的入队/出队操作

    //............编程实现队列的入队/出队操作 (先进先出) #include<iostream> using namespace std; //node表示队列中每个节点元素 ...

  2. redis + php 简单的 队列 入队-出队

    //入队 操作<?php //链接redis $redis = new Redis(); $redis->connect("127.0.0.1","6379& ...

  3. java循环队列入队出队算法_循环队列实现

    生活中有很多队列的影子,比如打饭排队,买火车票排队问题等,可以说与时间相关的问题,一般都会涉及到队列问题:从生活中,可以抽象出队列的概念,队列就是一个能够实现"先进先出"的存储结构 ...

  4. 简单实现顺序表示的栈与队列的进栈出栈创空栈入队出队创空队等算法

    栈和队列是两种最重要的数据结构,也是两种最典型的抽象数据类型,应用非常的广泛. 目录 一.栈 一.空栈的创建 二.进栈 三.出栈 二.队列 一.创建空队列 二.队列的入队和出队 三.取队列头元素 一. ...

  5. 顺序队和循环队列,队列篇(顺序队和循环队列入队出队操作)

    数据结构专升本学习,队列篇(顺序队和循环队列) 前言: 之前我们把栈学完了,比较简单,今天我们学习队列里面的顺序队和循环队列,说难不难,说简单不简单,我们需要认真学习,博主会尽力把原理和逻辑讲明白,不 ...

  6. 5-1链队入队出队操作

    链队基本操作. #include<iostream> using namespace std;#define OK 1 #define ERROR 0 typedef int Status ...

  7. 【数据结构入门】队列(Queue)详解(定义、销毁、入队、出队等)| 图解数据结构,超详细哦~

    文章目录 (1)前言 1)队列的概念 2)队列的结构 (2)队列的实现(链式结构) 1)队列的定义 2)队列的初始化 3)队列的销毁 4)入队(尾插) 5)出队(头删) 6)获取队列元素个数 7)获取 ...

  8. 队列的基本操作_算法与数据结构(五) 栈和队列

    ? 工欲善其事,必先利其器. 栈和队列 - Stack And Queue 栈 如何理解栈呢? 后进者先出,先进者后出,这就是典型的 "栈" 结构. 04_栈和队列-栈结构 从栈的 ...

  9. 2007基于循环链表的队列的基本操作(C++)

    描述 用带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(不设头指针).实现该队列的入队出队以及判断队列是否为空操作. 输入 多组数据,每组数据有两行.第一行为两个整数n和m,n表示入队序 ...

  10. 数据结构-第三章-栈和队列(5)-链队

    数据结构 ⚡️数据结构-第一章 ⚡️抽象数据类型案例 ⚡️数据结构-第二章(1)-线性结构 ⚡️数据结构-第二章(2)-线性表的顺序表示和实现 ⚡️数据结构-第二章(3)-顺序表(含代码) ⚡️数据结 ...

最新文章

  1. python画指数函数图像_解决python中的幂函数、指数函数问题
  2. 让植物“张嘴说话”!新加坡“植物机器人”可成为环境探测器促进农业生产...
  3. js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数
  4. 互联网巨头们的「中台战事」
  5. 音视频技术在云会议场景的拓展和未来
  6. 前端工程师应该达到什么水平,找工作薪资才比较高?
  7. ubuntu14.04 x86编译upx 3.92 及so加固
  8. C#开源资源大汇总(2)
  9. Mysql原理+ 多实例 +表损坏
  10. html工资计算页面模板,工资计算.html
  11. 嵌入式开发比单片机开发难?
  12. 拉格朗日方程的三种推导方法之基于欧拉-拉格朗日方程推导
  13. 怎么用计算机算lnx,ln计算(log计算器在线)
  14. java语音实现_用JAVA实现语音交互的功能(即语音聊天室的功能)
  15. php plaintext,php从邮件正文中提取text / plain
  16. 解决插入word文档中的图片变得不清晰问题
  17. 【头歌C语言程序与设计】字符数组
  18. JS脚本实现模拟按钮点击:批量抓取百度推广中的关键词建议
  19. mybais-plus出现Invalid bound statement (not found)的解决方案
  20. Spring Data MongoDB SpEL表达式注入漏洞安全风险通告第二次更新

热门文章

  1. 20155229《网络对抗技术》Exp4:恶意代码分析
  2. CentOS8系统新特性(2)--dnf代替yum管理软件包
  3. 面试官:请说说什么是BFC?大白话讲清楚
  4. 数独挑战(牛客网 2019年华南理工大学程序设计竞赛(春季赛))
  5. 关于个人所得税计算问题的一些心得
  6. 联想yoga710笔记本如何重装win7系统?
  7. java创建线程安全的Set集合
  8. 解决Address localhost:1099 is already in use
  9. 关于vivo手机真机调试,安装失败
  10. jq鼠标移入移出显示和隐藏_jQuery实现鼠标移入移出事件切换功能示例