首页 > 代码库 > 数据结构1-栈
数据结构1-栈
数据结构一直是我最薄弱的地方,所以要好好学习一下。
首先是栈。
栈有,判断栈是否为空,判断栈是否为满,出栈,入栈,取栈顶元素,这5个功能,用类实现,就是5个方法,5个成员函数。
为方便起见,栈能容纳元素的最大值设定为固定值。元素为int型。用C++实现如下:
1 //实现一个栈 2 #include<iostream> 3 4 using namespace std; 5 6 const int Max=100; 7 8 class stack 9 {10 private:11 int data[Max]; //定义一个数组来存放数据12 int top; //指向栈顶13 public:14 stack(); //构造函数15 ~stack(); //析构函数16 bool empty()const; 17 bool full()const;18 void push(int);19 void pop();20 int GetTop();21 };22 23 stack::stack()24 {25 top=-1;26 }27 28 stack::~stack()29 {30 }31 32 bool stack::empty()const33 {34 return top==-1;35 }36 37 bool stack::full()const38 {39 return top==Max-1;40 }41 42 void stack::push(int x)43 {44 if(full())45 {46 cout<<"栈已满!"<<endl;47 //exit (1);48 }49 else50 {51 top++;52 data[top]=x;53 }54 }55 56 void stack::pop()57 {58 if(empty())59 {60 cout<<"栈为空!"<<endl;61 //exit (1);62 }63 else64 {65 top--;66 } 67 }68 69 int stack::GetTop()70 {71 if(empty())72 {73 cout<<"栈为空!"<<endl;74 //exit (1);75 }76 else77 {78 return data[top];79 }80 }81 82 int main()83 {84 stack s1;85 s1.pop();86 s1.push(1);87 s1.push(2);88 s1.push(3);89 s1.push(4);90 s1.push(5);91 for(int i=0;i<5;i++)92 {93 cout<<s1.GetTop()<<endl;94 s1.pop();95 }96 s1.pop();97 return 0;98 }
在编写该栈的时候,学到了一个自己一直不知道的小细节,就是exit的用法,在60行处,如果栈为空,exit会直接退出整个程序,后面的代码将不再执行。
上面写的栈存储的数据时int型,如果我们要存储其他类型的数据,比较麻烦,因此我用模板把栈重新写了一下。
//实现一个栈#include<iostream>using namespace std;const int Max=100;template<class T>class stack{private: T data[Max]; //定义一个数组来存放数据 int top; //指向栈顶public: stack(); //构造函数 ~stack(); //析构函数 bool empty()const; bool full()const; void push(T); void pop(); T GetTop();};template<class T>stack<T>::stack(){ top=-1;}template<class T>stack<T>::~stack(){}template<class T>bool stack<T>::empty()const{ return top==-1;}template<class T>bool stack<T>::full()const{ return top==Max-1;}template<class T>void stack<T>::push(T x){ if(full()) { cout<<"栈已满!"<<endl; //exit (1); } else { top++; data[top]=x; }}template<class T>void stack<T>::pop(){ if(empty()) { cout<<"栈为空!"<<endl; //exit (1); } else { top--; } }template<class T>T stack<T>::GetTop(){ if(empty()) { cout<<"栈为空!"<<endl; //exit (1); } else { return data[top]; }}int main(){ stack<char> s1; s1.pop(); s1.push(‘a‘); s1.push(‘b‘); s1.push(‘c‘); s1.push(‘d‘); s1.push(‘e‘); for(int i=0;i<5;i++) { cout<<s1.GetTop()<<endl; s1.pop(); } s1.pop(); return 0;}
用了模板之后,stack就可以存储各种不同类型的数据。而不需要重新编写该类,非常方便。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。