链栈的自我练习和发现了一个好“过瘾”的问题(还没解决)

//linkstack.h

#ifndef LINKSTACK_H
#define LINKSTACK_H
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
template <class T>
struct Node
{
	T data;
	Node<T> *next;
};
template <class T>
class LinkStack
{
public:
	LinkStack(){top=NULL;}
	~LinkStack();
	void Push(T x);
	T Pop();
	T GetTop();
	bool Empty();
	void Print();
private:
	Node<T>*top;
};
template <class T>
LinkStack<T>::~LinkStack()
{
	
	while(top!=NULL)
	{
		Node<T>*q=top;
		top=top->next;
		delete q;
	}
}
template <class T>
void LinkStack<T>::Push(T x)
{
	Node<T>*s=new Node<T>;
	s->data=x;
	s->next=top;
	top=s;
}
template <class T>
T LinkStack<T>::Pop()
{
	if(top==NULL) throw "下溢";
	Node<T>*q=top;
	int x=q->data;
	top=top->next;
	delete q;
	return x;
}
template <class T>
T LinkStack<T>::GetTop()
{
	if(top!=NULL) return top->data;
	else return NULL;
}
template <class T>
bool LinkStack<T>::Empty()
{
	return (top==NULL? 1:0);
}
template <class T>
void LinkStack<T>::Print()
{
	Node<T>*p=top;
	if(p==NULL) cout<<"此链栈为空栈!"<<endl;
	else 
	{
		while(p!=NULL)
		{
			cout<<" "<<p->data<<"\n";
		    p=p->next;
		}
		cout<<endl;
	}
}

#endif

//main.cpp

#include "linkstack.h"
void main()
{
	LinkStack<int> link;
	int a[5]={1,2,3,4,5};
	for(int i=0;i<5;i++)
		link.Push(a[i]);
	cout<<"该链栈的元素分别为(从栈顶到栈底的顺序依次输出):\n";
	link.Print();
	cout<<"栈顶元素为:";
	if(link.GetTop()==NULL)
		cout<<"(该栈链为空)\n";
	else cout<<link.GetTop()<<endl;
	cout<<"\n执行前三个元素出栈并输出,如下:"<<endl;
	for(int j=0;j<3;j++)
       cout<<link.Pop()<<" ";
	if(link.Empty())
		cout<<"\n\n此时链栈变成了空栈\n";
	else cout<<"\n\n此时栈链还不是空栈\n";
	cout<<"\n执行最后两个元素出栈并输出:"<<link.Pop();
	cout<<" "<<link.Pop();
	if(link.Empty())
		cout<<"\n\n此时链栈变成了空栈\n";
	else cout<<"\n\n此时栈链还不是空栈\n";
}

结果图:



我发现的那个好“过瘾”的问题是,看两张图划红线部分:


为什么的呢?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值