栈(stacks)可变数组实现
来源:互联网 发布:mysql数据库的优化 编辑:程序博客网 时间:2024/05/17 07:21
其使用可变数组实现方式: 实现平台:widows 7 vs2010
ResizingArrayStack.h
#pragma oncetemplate<class T>class ResizingArrayStack{private:T *data;//数据int capacity;//栈的大小int top;//栈顶的位置void resize(int capacity);public:ResizingArrayStack(void);~ResizingArrayStack(void);void push(T item);T pop();bool isEmpty();};template<class T>ResizingArrayStack<T>::ResizingArrayStack(void){data = new T[1];this->capacity = 1;this->top = 0;}template<class T>ResizingArrayStack<T>::~ResizingArrayStack(void){delete data;}template<class T>void ResizingArrayStack<T>::push(T item){if(this->capacity == this->top){this->resize(this->capacity*2);}this->data[this->top++] = item;}template<class T>void ResizingArrayStack<T>::resize(int capicity){T* new_data = new T[capicity];this->capacity = capicity;for(int i = 0;i<this->top;i++){new_data[i] = data[i];}delete []data;data = new_data;}template<class T>bool ResizingArrayStack<T>::isEmpty(){return this->top == 0;} template<class T>T ResizingArrayStack<T>::pop(){if(this->isEmpty()){throw "stack is empty";}if(this->capacity/4 == this->top){this->resize(this->capacity/2);}return data[--this->top];}说明:这里我在重新分配栈空间大小时候不是采用栈满的时候增加一个空间。这样的话我们需要做多次copy工作。
首次入栈N个元素所需要copy次数:1 + 2 + … + N ~ N^2/2(二分之N的平方)
我们这里采用如果栈满的情况分配一个当前栈内容2倍大小的空间。
首次入栈N个元素所需要copy次数:N + (2 + 4 + 8 + … + N) ~ 3N.
测试主函数;
#include "stdafx.h"#include"ResizingArrayStack.h"#include<iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ResizingArrayStack<int> stack_test;try{ for(int i = 0;i < 10;i++) stack_test.push(i); for(int i = 0;i < 9;i++) cout<<stack_test.pop()<<endl;}catch(const char *ex){cout<<ex<<endl;}system("pause");return 0;}
测试结果:
0 0
- 栈(stacks)可变数组实现
- 栈(stacks)数组实现
- Chapter 3 | Stacks and Queues--一个数组实现三个栈(续)
- Chapter 3 | Stacks and Queues--一个数组实现三个栈
- 用数组实现栈 Array implementation of stacks
- java实现可变数组
- Implement Queue using Stacks(用栈实现队列)
- LeetCode(23)-Implement Queue using Stacks(栈实现队列)
- 队列-Implement Queue using Stacks(用栈实现队列)
- 232. Implement Queue using Stacks (用栈实现队列)
- C实现可变长数组
- NSMutableArray(可变数组)
- Stacks-分别用链表和数组实现(in Java)
- [HDU 5818] Joint Stacks (脑洞+实现)
- 用数组实现栈(Stacks)、队列(Queue)和双向链表(Doubly Linked List)的伪代码
- c语言实现简单可变数组
- java中怎么实现可变数组?
- struct实现拥有可变大小的数组
- 向Excel表格中写数据
- LoadRunner几个重要的概念:事务、集合点、思考时间
- Druid数据源的配置
- USB OTG驱动分析(一)
- understanding process and update
- 栈(stacks)可变数组实现
- VNC
- Ubuntu下gcc安装及使用
- 总结小知识
- APP推广需要注意什么
- 基类和派生类的地址问题
- C++标准库中bitset类型
- vs 已经添加了引用,编译还是提示没有添加引用
- 【Java】>>和>>>的区别