这个是用链表实现的栈,具体不想多说,直接看代码。
先写linked_Stack.h
#include<iostream>
using namespace std;
template <class T>
struct node{
T d;
node *next;
};
template <class T>
class linked_Stack{
private:
node<T> *top;
public:
linked_Stack();
void prt_linked_Stack();
int flag_linked_Stack();
void ins_linked_Stack(T);
T del_linked_Stack();
T read_linked_Stack();
};
template <class T>
linked_Stack<T>::linked_Stack(){
top=NULL;
return;
}
template <class T>
void linked_Stack<T>::prt_linked_Stack(){
node<T> *p;
p=top;
if(p==NULL){cout<<"Empty stack!"<<endl;return;}
do{
cout<<p->d<<endl;
p=p->next;
}while(p!=NULL);
return ;
}
template <class T>
int linked_Stack<T>::flag_linked_Stack(){
if(top==0)return 0;
return 1;
}
template <class T>
void linked_Stack<T>::ins_linked_Stack(T x){
node<T> *p;
p=new node<T>;
p->d=x;
p->next=top;
top=p;
return;
}
template <class T>
T linked_Stack<T>::del_linked_Stack(){
T y;
node<T> *q;
if(top==NULL){cout<<"Empty stack"<<endl;return 0;}
q=top;
y=q->d;
top=q->next;
delete q;
return y;
}
template <class T>
T linked_Stack<T>::read_linked_Stack(){
if(top==NULL){cout<<"Empty stack"<<endl;return 0;}
return (top->d);
}
接着就是,linked_Stack_main.cpp
#include"linked_Stack.h"
int main(){
linked_Stack<int> s;
s.ins_linked_Stack(50);
s.ins_linked_Stack(60);
s.ins_linked_Stack(70);
s.ins_linked_Stack(80);
s.ins_linked_Stack(90);
s.ins_linked_Stack(100);
cout <<"1 output the element:"<<endl;
s.prt_linked_Stack();
if(s.flag_linked_Stack())
cout<<"the top element"<<s.read_linked_Stack()<<endl;
if(s.flag_linked_Stack())
cout<<"the delete element"<<s.del_linked_Stack()<<endl;
if(s.flag_linked_Stack())
cout<<"the delete element"<<s.del_linked_Stack()<<endl;
if(s.flag_linked_Stack())
cout<<"the delete element"<<s.del_linked_Stack()<<endl;
cout <<"2 output the element:"<<endl;
s.prt_linked_Stack();
return 0;
}
其实,我在学这个链表的时候很是分不清楚,到底是谁指向了谁,尤其是等号,到底是左边付给了右边,还是所谓左边指向了右边,真的乱,怎么办?画个图,慢慢看,慢慢反应,简单说几句,关于插入,其实,就是新建一个点,那么它的指针域(所谓的)指向为head,那么head下次再指向当前的结点,那么就华丽的从以前的那个head变为现在这个位置上面的head,也许有些乱,好好想想;然后就是,删除,那么令当前的head为另外的一个节点,然后,删除它,让head指向当前的下一个指针域,从而此时head成为新的头结点,来来回回就是这么个过程,真的好好回忆一下就明白了。
最后,截个图