带链的栈的实现和操作

这个是用链表实现的栈,具体不想多说,直接看代码。

先写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成为新的头结点,来来回回就是这么个过程,真的好好回忆一下就明白了。

最后,截个图




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值