栈
#pragma once
#include <vector>
template <class T, int capacity
= 30>
class Stack {
public:
Stack() {
pool
.reserve(capacity
);
}
void clear() {
pool
.clear();
}
T
& topEL() {
return pool
.back();
}
T
pop() {
T val
= pool
.back();
pool
.pop();
return val
;
}
void push(const T
&val
) {
pool
.push_back(val
);
}
private:
std
::vector
<T
> pool
;
};
队列
#pragma once
#include <vector>
template<class T, int size
= 60 >
class Myqueue
{
public:
Myqueue() {
q
= std
::vector
<T
>(size
);
first
= last
= -1;
}
void push(T
);
T
pop();
bool isFull() {
return (first
== 0 && last
== size
- 1) || first
== last
+ 1;
}
bool isEmpty() {
return first
== -1;
}
private:
std
::vector
<T
> q
;
int first
, last
;
};
template<class T, int size
>
void Myqueue
<T
,size
>::push(T val
) {
if (!isFull())
{
if (last
==size
-1 || last
== -1)
{
q
[0] = val
;
last
= 0;
if (first
== -1) first
= 0;
}
else
{
q
[++last
] = val
;
}
}
else
{
std
::cout
<< "Full" << std
::endl
;
}
}
template<class T, int size
>
T Myqueue
<T
, size
>::pop() {
if (!isEmpty())
{
T val
= q
[first
];
if (first
==last
){
first
= last
= -1;
}
else if (first
==size
-1)
{
first
= 0;
}else{
first
++;
}
return val
;
}
}
转载请注明原文地址: https://mac.8miu.com/read-489589.html