数据结构之栈


数据集合从一端插入以及删除,满足 后进先出(Last in First out)的特性,栈只有两个操作,入栈(push)和出栈(pop),在实现形式上有依托数组实现的顺序栈与依托链表实现的链式栈

栈的复杂度分析

  1. 入栈:栈的入栈操作只是在数据末尾添加数据,在未达到边界条件下是以直接插入的形式进行,没有数组的随机访问的特性,因此入栈的时间复杂度为O(1)
  2. 出栈:栈的弹出只能由结构中的尾部直接弹出删除,并不能从中间或者头部实现弹出操作,因此出栈的时间复杂度也为O(1)
    在这里插入图片描述
  3. 还有一种栈支持动态扩容,假设容量capcity为N,那么在边界情况N-1下,动态扩容至2倍,此时需要额外申请内存空间,然后进行数据复制搬移,因此此时边界条件下入栈的时间复杂度变为O(n),然后在剩下的N-1的数据入栈下时间复杂度又变为O(1),依据平均时间复杂度的摊还分析法可以得知,扩容复制的那一次的O(n)的时间复杂度在剩余的N-1次入栈条件下,平均时间复杂度依旧为O(1)

顺序栈的C++实现

#pragma once

class Stack
{
   
private:
	int capcity;//栈的最大容量
	int size;	//当前栈中数据个数
	int* array; //数组空间

public:
	Stack(int n = 0);
	//析构掉申请的数组空间
	~Stack();
	//栈为满
	bool IsFull();
	//栈为空
	bool IsEmpty();
	//获取当前个数
	int GetSize();
	//获取当前栈的最大容量
	int GetCapcity();
	//入栈
	bool Push(int elem);
	//出栈并返回出栈数据
	int Pop();
	//清空栈内所有数据
	void Clear();
};
#include"stack.h"
#include<iostream>
using std::cout;
using std::endl;

Stack::Stack(int n)
{
   
	capcity = n;
	size = 0;
	array = new int[capcity];
}

Stack::~Stack()
{
   
	delete[]array;
}

bool Stack::IsFull()
{
   
	if (size == capcity && capcity)
		return true;
	return false;
}

bool Stack::IsEmpty()
{
   
	if (capcity && size == <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值