197 lines
6.0 KiB
C++
197 lines
6.0 KiB
C++
|
|
/*----------------------------------------------------------------------------------------------------
|
|||
|
|
#
|
|||
|
|
# Copyright (c) 2022 Yuankang Liang(XerolySkinner)
|
|||
|
|
#
|
|||
|
|
# <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD>ṩ,<2C><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ʾ
|
|||
|
|
# <09><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>߶<EFBFBD><DFB6><EFBFBD><EFBFBD>е<EFBFBD><D0B5>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⳥<EFBFBD><E2B3A5><EFBFBD><EFBFBD>
|
|||
|
|
#
|
|||
|
|
# ʹ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
|||
|
|
# 1. <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ,<2C>㲻<EFBFBD><E3B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD>.
|
|||
|
|
# 2. <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>Ŀ<EFBFBD><C4BF>,ǰ<><C7B0><EFBFBD>ǰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>и<EFBFBD><D0B8><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
# <09><><EFBFBD>Ұ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>.
|
|||
|
|
# 3. <09><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>,<2C><><EFBFBD><EFBFBD>,<2C><EFBFBD>,<2C>ַ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>۱<EFBFBD><DBB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
# 4. <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD>Ʒ<EFBFBD><C6B7>ʹ<EFBFBD><CAB9>,<2C><>Ʒ<EFBFBD>ĵ<EFBFBD><C4B5>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵ĵ<CDB5><C4B5><EFBFBD><EFBFBD>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
# 5. <09><>֪ͨ<CDA8><D6AA><EFBFBD>ô<EFBFBD><C3B4>κ<EFBFBD><CEBA><EFBFBD>Դɾ<D4B4><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
#
|
|||
|
|
# Yuankang Liang(XerolySkinner)
|
|||
|
|
# E-mail:zabbcccbbaz@163.com
|
|||
|
|
# QQ:2715099320
|
|||
|
|
# Mobile Phone:13005636215
|
|||
|
|
#
|
|||
|
|
# All rights reserved.
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @file STL_Queue.cpp
|
|||
|
|
* @brief ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>STL<EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>Queue
|
|||
|
|
* @mainpage <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>Ϣ
|
|||
|
|
* @author Yuankang Liang(XerolySkinner)
|
|||
|
|
* @email zabbcccbbaz@163.com
|
|||
|
|
* @version V1.0.0
|
|||
|
|
* @date 2022-11-09 01:03
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
//----------------------------------------------------------------------------------------------------
|
|||
|
|
// ͷ<>ļ<EFBFBD>
|
|||
|
|
#include "STL_Queue.h"
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
//----------------------------------------------------------------------------------------------------
|
|||
|
|
// <09><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
STL_rQueue::STL_rQueue(void) {
|
|||
|
|
room = 0;
|
|||
|
|
size = 0;
|
|||
|
|
dat = NULL;}
|
|||
|
|
//----------------------------------------------------------------------------------------------------
|
|||
|
|
STL_rQueue::~STL_rQueue(void) {
|
|||
|
|
free(dat);}
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
//----------------------------------------------------------------------------------------------------
|
|||
|
|
// <09><>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>
|
|||
|
|
/**
|
|||
|
|
* @brief ѹ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա
|
|||
|
|
* @param var <EFBFBD><EFBFBD>Ҫѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
|
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
u8 STL_rQueue::push(u8 var) {
|
|||
|
|
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
|
|||
|
|
u8* temp_stacks = dat;
|
|||
|
|
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>пռ<D0BF>
|
|||
|
|
if (size >= room) {
|
|||
|
|
// <09><><EFBFBD><EFBFBD><EFBFBD>³<EFBFBD><C2B3><EFBFBD>
|
|||
|
|
dat = static_cast<u8*>(realloc(dat, ++size));
|
|||
|
|
// <09><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>,<2C>ƺ<EFBFBD><C6BA><EFBFBD><EFBFBD>ҷ<EFBFBD><D2B7>ش<EFBFBD><D8B4><EFBFBD>
|
|||
|
|
if (dat == NULL) {
|
|||
|
|
--size; // <09>ָ<EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>
|
|||
|
|
dat = temp_stacks; // <09>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
return QUEUES_REAL_ERROR;} // <09><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD>
|
|||
|
|
room = size;
|
|||
|
|
// <09><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>,ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
dat[size - 1] = var;
|
|||
|
|
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷָ<C8B7><D6B8>
|
|||
|
|
return QUEUES_OK;}
|
|||
|
|
// <09>ռ<EFBFBD>ʣ<EFBFBD><CAA3>,ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
dat[(++size) - 1] = var;
|
|||
|
|
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷָ<C8B7><D6B8>
|
|||
|
|
return QUEUES_OK;}
|
|||
|
|
//----------------------------------------------------------------------------------------------------
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա
|
|||
|
|
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
u8 STL_rQueue::pop(void) {
|
|||
|
|
// <09><><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>1,<2C><><EFBFBD>̳<EFBFBD>Ա<EFBFBD>ռ<EFBFBD>
|
|||
|
|
if (size > 1) {
|
|||
|
|
// <09><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>һλ
|
|||
|
|
for (u32 i = 0; i < size - 1; i++)
|
|||
|
|
*(dat + i) = *(dat + i + 1);
|
|||
|
|
--size; // <09><><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>ռ<EFBFBD>
|
|||
|
|
return QUEUES_OK;}
|
|||
|
|
// <09><><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>1,<2C><>ָ<EFBFBD><D6B8>ͷ
|
|||
|
|
else if (size == 1) {
|
|||
|
|
size = 0; // <09><><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>ռ<EFBFBD>
|
|||
|
|
return QUEUES_OK;} // <09><><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>Ϊ<EFBFBD><CEAA>,<2C><><EFBFBD>ؿն<D8BF><D5B6>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
else
|
|||
|
|
return QUEUES_EMPTY;}
|
|||
|
|
//----------------------------------------------------------------------------------------------------
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
|
* @param &var <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
u8 STL_rQueue::top(u8& var) {
|
|||
|
|
if (size) {
|
|||
|
|
var = dat[0];
|
|||
|
|
return QUEUES_OK;}
|
|||
|
|
return QUEUES_EMPTY;}
|
|||
|
|
//----------------------------------------------------------------------------------------------------
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD>س<EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @return <EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,Ϊu8<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD>u32<EFBFBD><EFBFBD>ռ4<EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
u32 STL_rQueue::The_size(void) {
|
|||
|
|
return size;}
|
|||
|
|
//----------------------------------------------------------------------------------------------------
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>õ<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @return <EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>,u8<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
u32 STL_rQueue::The_room(void) {
|
|||
|
|
return room;}
|
|||
|
|
//----------------------------------------------------------------------------------------------------
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀռ<EFBFBD><EFBFBD>ȶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>,<EFBFBD>ڳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
|
|||
|
|
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
u8 STL_rQueue::clean(void) {
|
|||
|
|
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
|
|||
|
|
u8* temp_stacks = dat;
|
|||
|
|
// <09><><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>Ա,<2C><><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ռ<EFBFBD>
|
|||
|
|
if (size) {
|
|||
|
|
// <09><><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ռ<EFBFBD>
|
|||
|
|
dat = static_cast<u8*>(realloc(dat, size));
|
|||
|
|
// <09><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>,<2C>ƺ<C6BA><F3B2A2B7>ش<EFBFBD><D8B4><EFBFBD>
|
|||
|
|
if (dat == NULL) {
|
|||
|
|
--size; // <09>ָ<EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>
|
|||
|
|
dat = temp_stacks; // <09>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
return QUEUES_REAL_ERROR;} // <09><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD>
|
|||
|
|
}
|
|||
|
|
// <09><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>Ա
|
|||
|
|
else {
|
|||
|
|
free(dat); // <09>ͷ<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>ռ<EFBFBD>
|
|||
|
|
dat = NULL;
|
|||
|
|
size = 0;} // <09><>ָ<EFBFBD><D6B8><EFBFBD>ײ<EFBFBD>
|
|||
|
|
// <09><><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ؿն<D8BF><D5B6><EFBFBD>
|
|||
|
|
room = size; // <09>µĿռ<C4BF><D5BC><EFBFBD>С
|
|||
|
|
return QUEUES_OK;}
|
|||
|
|
//----------------------------------------------------------------------------------------------------
|
|||
|
|
/**
|
|||
|
|
* @brief ѹ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>32λ<EFBFBD><EFBFBD>Ա
|
|||
|
|
* @param var <EFBFBD><EFBFBD>Ҫѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
|
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
u8 STL_rQueue::push32(u32 var) {
|
|||
|
|
push(((u8*)(&var))[3]);
|
|||
|
|
push(((u8*)(&var))[2]);
|
|||
|
|
push(((u8*)(&var))[1]);
|
|||
|
|
push(((u8*)(&var))[0]);
|
|||
|
|
return QUEUES_OK;}
|
|||
|
|
//----------------------------------------------------------------------------------------------------
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա
|
|||
|
|
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD>Աֵ
|
|||
|
|
* @note <EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
u8 STL_rQueue::poptop(void) {
|
|||
|
|
u8 var = 0;
|
|||
|
|
top(var); pop();
|
|||
|
|
return var;}
|
|||
|
|
//----------------------------------------------------------------------------------------------------
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>32λ<EFBFBD><EFBFBD>Ա
|
|||
|
|
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD>Աֵ
|
|||
|
|
* @note <EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
u32 STL_rQueue::poptop32(void) {
|
|||
|
|
u8 dat[4] = { 0,0,0,0 };
|
|||
|
|
top(dat[3]); pop();
|
|||
|
|
top(dat[2]); pop();
|
|||
|
|
top(dat[1]); pop();
|
|||
|
|
top(dat[0]); pop();
|
|||
|
|
return *((u32*)(dat));}
|
|||
|
|
//----------------------------------------------------------------------------------------------------
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>void(*)void<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @note <EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
void(*STL_rQueue::poptopfun(void))(void) {
|
|||
|
|
return (void(*)(void))poptop32();}
|
|||
|
|
//----------------------------------------------------------------------------------------------------
|
|||
|
|
/**
|
|||
|
|
* @brief ѹ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>void(*)void<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @note <EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
void STL_rQueue::pushfun(void(*fun)(void)) {
|
|||
|
|
push32((u32)fun);}
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////
|