C++数据结构笔记(7)——队列的顺序结构实现

1.队列,和现实生活中的规则类似,先进先出

2.队尾只允许元素进入,队头只允许元素退出

3.用数组来实现队列的顺序存储,无论哪一段都可以作为队头或者队尾

SeqQueue.h头文件

#ifndef SEQQUEUE_H 
#define SEQQUEUE_H
#include<stdlib.h>
#include<stdio.h>typedef struct SeqQueue{void* data[1024];int size;
}SeqQueue;//初始化队列 
SeqQueue* Init_SeqQueue();
//入队
void Push_SeqQueue(SeqQueue* queue,void* data);
//返回队头元素
void* Front_SeqQueue(SeqQueue* queue);
//出队
void Pop_SeqQueue(SeqQueue* queue);
//返回队尾元素 
void* Back_SeqQueue(SeqQueue* queue);
//返回大小
int Size_SeqQueue(SeqQueue* queue);
//清空队列
void Clear_SeqQueue(SeqQueue* queue);
//销毁队列
void FreeSpace_SeqQueue(SeqQueue* queue);
#endif 

SeqQueue.c源文件

初始化队列 

SeqQueue* Init_SeqQueue(){SeqQueue* queue =(SeqQueue*)malloc(sizeof(SeqQueue));for(int i=0;i<=1024-1;i++)queue->data[i]=NULL;queue->size=0; return queue;
}

入队

void Push_SeqQueue(SeqQueue* queue,void* data){//规定数组的左边为队列的头部if(queue==NULL)return;if(data==NULL)return;if(queue->size==1024)return; queue->data[queue->size]=data;//关键步骤:直接将容量作为数组最后一个元素的下标 queue->size++;	 
}

返回队头元素

void* Front_SeqQueue(SeqQueue* queue){if(queue==NULL)return NULL;if(queue->size==0)return NULL;return queue->data[0];
}

出队

void Pop_SeqQueue(SeqQueue* queue){if(queue==NULL)return;if(queue->size==0)return;for(int i=0;i<queue->size-1;i++)queue->data[i]=queue->data[i+1];queue->size--;
}

返回队尾元素 

void* Back_SeqQueue(SeqQueue* queue){if(queue==NULL)return NULL;if(queue->size==0)return NULL;return queue->data[queue->size-1];
}

返回大小

int Size_SeqQueue(SeqQueue* queue){if(queue==NULL)return -1;return queue->size;
}

清空队列

void Clear_SeqQueue(SeqQueue* queue){if(queue==NULL)return;queue->size=0;
}

销毁队列

void FreeSpace_SeqQueue(SeqQueue* queue){if(queue==NULL)return;free(queue);
}

main.cpp主函数测试文件

#include <iostream>
#include <string.h>
#include "SeqQueue.h"
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */typedef struct goal{string name;int date;	
}goal;int main(int argc, char** argv) {goal g1,g2;g1.date=20010927;g1.name="JSL";g2.date=20011228;g2.name="HYH";SeqQueue* queue=Init_SeqQueue();Push_SeqQueue(queue,&g1);Push_SeqQueue(queue,&g2);//指针类型取地址,别忘了 cout<<"这是关于"<<(Size_SeqQueue(queue))<<"个人的故事~"<<endl;while(queue->size!=0){goal* temp=(goal*)Front_SeqQueue(queue);//取出指针并且强转cout<<(temp->name)<<":"<<(temp->date)<<endl;Pop_SeqQueue(queue);//每输出一次即刻将队头元素弹出 //注意:Pop_SeqQueue方法中已经包含了size--的操作,此时如果再加一条,就会一次性减2次 }FreeSpace_SeqQueue(queue); return 0;
}

测试截图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/15179.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux——进程信号详解

目录 一.进程信号的理解 1.1定义&#xff1a; 1.2举例&#xff1a; 1.3总结&#xff1a; 二.进程信号地使用&#xff1a; 2.1信号种类&#xff1a; 2.2而操作系统向进程发送信号地方式有四种&#xff1a; 2.2.1以键盘的方式向进程发送信号 接下来介绍一个系统调用函数sign…

chrome开发调试小技巧—Replay XHR(重新请求)

一、需求 想要验证一个ajax请求&#xff0c;需要每次都需要在页面点几次才会触发或者刷新页面&#xff0c;着急调试看效果时&#xff0c;可以通过chrome的Replay XHR功能直接同参数重新请求ajax 二、实现 chrome调试工具network下找到要重新发起的ajax请求&#xff0c;右键找…

python读写excel利器:xlwings从入门到精通

python读写excel利器&#xff1a;xlwings 从入门到精通 目录 安装和使用 基础操作 操作工作簿操作工作表读取单元格写入(单元格赋值)range的操作&#xff08;range常用的api&#xff09; 写入一行或一列Excel数据(函数式&#xff09;使用range(\A1\).api.AddComment(\comments…

力扣 332. 重新安排行程

题目来源&#xff1a;https://leetcode.cn/problems/reconstruct-itinerary/description/ C题解&#xff08;来源代码随想录&#xff09;&#xff1a; 这道题目有几个难点&#xff1a; 一个行程中&#xff0c;如果航班处理不好容易变成一个圈&#xff0c;成为死循环。解决&am…

ue4:Dota总结_BP_CameraPawn篇

设计wasd移动&#xff1a; 鼠标拖动视口&#xff1a; 鼠标滚轮调整远近&#xff1a; Beginplay&#xff1a; qe按键旋转&#xff1a; 变量&#xff1a;

word@制表位和列数据对齐@填空下划线制作

文章目录 refs制表位(tab stop)制表位类型 制作对其的下划线填空表单&#x1f47a;利用前导符代替下划线制作待填空下划线 制表位对其列数据模拟简单表格测试数据设置引线使用标尺设置 FAQ refs Insert or add tab stops - Microsoft SupportUsing the ruler in Word - Micros…

【Django】列表数据Paginatior分页,动态返回页码,显示当前页、总页数、跳转页

问题 1、当返回数据较多,如设置每页展示10条,数据接近200条,返回页码范围1~20,前端每个页码都显示的话,就会出现页码超出当前页面,被遮挡的页码无法操作和显示不美观; 2、列表的所在页码,总分页数,跳转不在动态页面的页数 解决 在使用paginator转化为Page对象后,获…

从零开始 Spring Boot 63:Hibernate 继承映射

从零开始 Spring Boot 63&#xff1a;Hibernate 继承映射 图源&#xff1a;简书 (jianshu.com) 关系型数据库设计中是不存在继承概念的&#xff0c;但实体类可以用继承来组织代码结构&#xff0c;所以需要用一种方式将实体类的继承结构映射到表结构。 本文将介绍几种在 JPA&a…

MySQL逻辑架构

MySQL逻辑架构 1. MySQL逻辑架构1.1 连接层1.2 服务层1.3 引擎层 2. SQL执行流程2.1 SQL执行流程2.2 查看SQL执行流程2.3 SQL语法顺序 1. MySQL逻辑架构 分为Connectors层、MySQL服务器对应架构、存储层&#xff1b;MySQL服务器对应架构分为连接层、服务层、引擎层&#xff0c…

RabbitMQ系列(26)--RabbitMQ实现高可用负载均衡

前言&#xff1a;我们以往只能连接一个指定的队列&#xff0c;不能自由地连接其他的队列&#xff0c;当我们连接的那个指定队列宕机了&#xff0c;生产者和消费者都没办法往队列发送消息和消费消息&#xff0c;而且生产者和消费者也不能自动的连接到其他正常运行的队列&#xf…

sqlite维护命令复习学习

前面已经看了一些sqlite命令&#xff0c;例如查看表名&#xff0c;查看表结构等&#xff1b;下面继续看一下&#xff1b; 查看全部表名&#xff1b; 查看单个或全部的表结构&#xff1b; 输出表结构和数据&#xff1b; 使用.output 把查询结果定向到1.txt&#xff1b; 重新定向…

【JavaEE初阶】JavaScript(WebAPI)

文章目录 1.WebAPI背景知识1.1什么是WebAPI1.2什么是API 2.DOM基本概念2.1什么是DOM2.2常用的DOMAPI2.2.1.选中页面元素2.2.2操作元素的属性1. 事件概念2.获取/修改元素内容3. 获取/修改元素属性4.获取/修改表单元素属性5.获取修改样式属性 2.2.3.操作页面节点1.新增节点2.删除…