![](https://csdnimg.cn/release/download_crawler_static/86331461/bg4.jpg)
4
第7章 栈与队列
19
1)栈的初始化
构造函数初始化一个栈对象,它为_items数
组申请指定大小的存储空间来存放栈的数据
元素,设置栈初始状态为空。
StackSP(int initCapa = DefaultCapacity){
// cout << "constructoring SequencedStack object" << endl;
_capacity = initCapa;
_items = make_unique<T[]>(_capacity);
_topidx = EMPTY; }
SequencedStack<int> ss1(128);
SequencedStack<int> ss2;
使
用
第7章 栈与队列
20
copyconstructor
StackSP(const StackSP& s) {
_capacity = s._capacity;
_items = make_unique<T[]>(_capacity);
_topidx = s._topidx;
for (int i = 0; i <= _topidx; i++)
_items[i] = s._items[i];
}
SequencedStack<int> ss3(128);……
SequencedStack<int> ss4(ss3);
使
用
第7章 栈与队列
21
2)返回栈的元素个数
const修饰表明这个函数不修改实例的状态,
是个只读过程
。
int size() const{return _topidx + 1;};
int count() const{return _topidx+1;};
第7章 栈与队列
22
3)判断栈是否为空和判断栈是否为满
empty():当_topidx为EMPTY时,表明栈为空状态,true。
full():当_topidx已指向当前的最后一个单元时,表明
栈为满状态,true
bool empty() const{return _topidx==EMPTY;};
bool full() const{return _topidx>=_capacity-1;};
布尔类函数
第7章 栈与队列
23
4)入栈Push(k)
过程:当栈不满时,栈顶元素下标_topidx自加1,将新
数据k放入_topidx位置,作为新的栈顶元素。
当栈实例当前分配的存储空间已装满数据元素,在进
行后续的操作前,需要调用本类中定义的increCapacity
函数重新分配存储空间,并将原数组中的数据元素逐
个拷贝到新数组。
入栈数据的类型:调用push函数实参的类型要与栈实
例定义时声明的元素类型保持一致。例如:定义s为
StackSP<string>类型,则以后入栈语句s.push(k)中的实
参k必须为string类型。
StackSP<int> s;
s.push(14); s.push(8); s.push(27);
第7章 栈与队列
24
push(k)的代码
void increCapacity(int amount=DefaultCapacity) {
_capacity += amount;
int cnt = _topidx + 1;
auto newspace= make_unique<T[]>(_capacity);
for(int i=0;i<cnt;i++)newspace[i]=_items[i];
_items.reset();
_items = move(newspace);}
void push(const T& k) {
if (full())increCapacity(DefaultCapacity);
_topidx++;
_items[_topidx] = k;}
重
新
分
配
存
储
空
间