加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

每日一题18:栈

发布时间:2020-12-13 20:07:57 所属栏目:PHP教程 来源:网络整理
导读:用C++写了1个栈模板,其间用了1些《Effective C++》的准则,记录在这里喽。这个类还没有做到异常安全,以后改进! Stack.h文件。 #ifndef _STACK_H_ # define _STACK_H_ namespace MyDataStructure{ template typename T class Stack { private : int Capaci

用C++写了1个栈模板,其间用了1些《Effective C++》的准则,记录在这里喽。这个类还没有做到异常安全,以后改进!
Stack.h文件。

#ifndef _STACK_H_ #define _STACK_H_ namespace MyDataStructure { template <typename T> class Stack { private: int Capacity; int Top; T* Vals; bool null() { return Capacity == 0; } void init(int capacity) { Capacity = capacity; Top = 0; Vals = new T[capacity]; } void copy(const Stack& s) { Capacity = s.Capacity; Top = s.Top; Vals = NULL; if(s.Capacity != 0) { Vals = new T[Capacity]; memcpy(Vals,s.Vals,Capacity*sizeof(T)); } } void destroy() { if(Vals != NULL) delete []Vals; Top = 0; Capacity = 0; } public: Stack() : Capacity(0),Top(0),Vals(NULL){}; Stack(int capacity) :Capacity(capacity),Top(0) { Vals = new T[capacity]; } Stack(const Stack& s) { copy(s); } Stack& operator = (const Stack& s) { if(this == &s) return *this; destroy(); copy(s); return *this; } ~Stack() { destroy(); } bool resize(int capacity) { if(capacity <= 0) return false; if(capacity == Capacity) return true; if(!null()) { T* vals = new T[capacity]; if(capacity >= Top) { memcpy(vals,Vals,Top*sizeof(T)); } else { memcpy(vals,capacity*sizeof(T)); Top = capacity; } Capacity = capacity; delete []Vals; Vals = vals; } else init(capacity); return true; } bool push(T val) { if(!full() && !null()) { Vals[Top++] = val; return true; } return false; } bool pop(T& val) { if(!null() && !empty()) { val = Vals[--Top]; return true; } return false; } bool top(T &val) { if(!null() && !empty()) { val = Vals[Top - 1]; return true; } return false; } void clear() { Top = 0; } void size() { return Top; } bool empty() { return Top == 0; } bool full() { return Top == Capacity; } }; } #endif

下面是测试函数:
StackTest.cpp

// StackTest.cpp : 定义控制台利用程序的入口点。 // #include "stdafx.h" #include "Stack.h" #include <iostream> using namespace MyDataStructure; using namespace std; int _tmain(int argc,_TCHAR* argv[]) { Stack<int> s1(10); for (int i = 1; i < 11; ++i) { s1.push(i); } Stack<int> s2(s1); s1.resize(20); for (int i = 1; i < 11; ++i) { int val; if(s1.pop(val)) { cout<<val<<' '; } } cout<<endl; for (int i = 1; i < 11; ++i) { int val; if(s2.pop(val)) { cout<<val<<' '; } } cout<<endl; return 0; }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读