1 // 2 // Stack.h 3 // 链接栈 4 // 5 // Created by geshenglu on 2020/3/21. 6 // Copyright © 2020 geshenglu. All rights reserved. 7 // 8 9 #ifndef Stack_h 10 #define Stack_h 11 template<class Elemtype> 12 class Stack 13 { 14 public: 15 virtual bool IsEmpty() const =0; 16 virtual void Push(const Elemtype&x)=0; 17 virtual Elemtype Pop()=0; 18 virtual Elemtype Top()const =0; 19 virtual ~Stack(){}; 20 }; 21 #endif /* Stack_h */
1 // 2 // LinkStack.h 3 // 链接栈 4 // 5 // Created by geshenglu on 2020/3/21. 6 // Copyright © 2020 geshenglu. All rights reserved. 7 // 8 9 #ifndef LinkStack_h 10 #define LinkStack_h 11 #include "Stack.h" 12 template<class Elemtype> 13 class LinkStack:public Stack<Elemtype>{ 14 private: 15 struct Node{ 16 Elemtype data; 17 Node *next; 18 Node(const Elemtype &x,Node *n = nullptr){ 19 data = x; 20 next = n; 21 } 22 Node(){ 23 next = nullptr; 24 } 25 ~Node(){} 26 }; 27 Node *elem; 28 public: 29 LinkStack(){ 30 elem = nullptr; 31 } 32 ~LinkStack(); 33 virtual bool IsEmpty() const override; 34 virtual void Push(const Elemtype&x)override; 35 virtual Elemtype Pop()override; 36 virtual Elemtype Top()const override; 37 }; 38 template<class Elemtype> 39 LinkStack<Elemtype>::~LinkStack(){ 40 41 while(elem!=nullptr){ 42 Node *tmp = elem; 43 elem = elem->next; 44 delete tmp; 45 } 46 } 47 48 template<class Elemtype> 49 bool LinkStack<Elemtype>::IsEmpty() const{ 50 return elem == nullptr; 51 } 52 53 template<class Elemtype> 54 void LinkStack<Elemtype>::Push(const Elemtype&x){ 55 Node *tmp = new Node(x,elem); 56 elem = tmp; 57 } 58 59 template<class Elemtype> 60 Elemtype LinkStack<Elemtype>::Pop(){ 61 Node *tmp = elem; 62 Elemtype x = tmp->data; 63 elem = tmp->next; 64 delete tmp; 65 return x; 66 } 67 68 template<class Elemtype> 69 Elemtype LinkStack<Elemtype>::Top()const{ 70 return elem->data; 71 } 72 #endif /* LinkStack_h */
1 // 2 // main.cpp 3 // 打印正整数程序 4 // 5 // Created by geshenglu on 2020/3/23. 6 // Copyright © 2020 geshenglu. All rights reserved. 7 // 8 9 #include <iostream> 10 #include "LinkStack.h" 11 #include <stack> 12 //栈模拟 正整数输出 13 void PrintNum(int num){ 14 LinkStack<int> stack; 15 stack.Push(num); 16 while (!stack.IsEmpty()) { 17 int tmp = stack.Top(); 18 if (tmp>9) { 19 stack.Pop(); 20 stack.Push(tmp%10); 21 stack.Push(tmp/10); 22 } 23 else 24 std::cout<<stack.Pop()<<std::endl; 25 } 26 } 27 28 //递归模拟 正整数输出 29 void printInt(int num){ 30 if(num==0) 31 return; 32 printiInt(num/10); 33 std::cout<<num%10; 34 } 35 36 int main(int argc, const char * argv[]) { 37 // insert code here... 38 PrintNum(1234); 39 printInt(1234); 40 return 0; 41 }