实验2:链栈

#include <iostream>
using namespace std;
template <class datatype>
struct Node
{
	datatype data;
	Node <datatype> *next;
};
template <class datatype>
class link
{
private:
	Node<datatype> *front,*rear;
public:
	link();
	~link();
	void Push(datatype x);      //ru
	datatype Pop();          //chu
	datatype Gettop()       //zhuqu
	{
		if (front != rear)
			return front->next->data;
	}
	int Empty()
	{
		if (front==rear)
			return 1;
		else
			return 0;
	}
};

template <class datatype>
link<datatype>::link()
{
	Node <datatype> *s = NULL;
	s = new Node<datatype>;
	s->next = NULL;
	front = rear = s;
}

template <class datatype>
link<datatype>::~link()
{
	Node <datatype>*p = NULL;
	while (front != NULL)
	{
		p = front->next;
		delete front;
		front = p;
	}
}

template <class datatype>
void link<datatype>::Push(datatype x)
{
	Node<datatype> *s = NULL;
	s = new Node<datatype>;
	s->data = x;
	s->next = NULL;
	rear->next = s;
	rear = s;
}

template <class datatype>
datatype link<datatype>::Pop()
{
	Node<datatype> *p = NULL;
	int x;
	if (rear == front) throw"下溢";
	p=front->next;
	x = p->data;
	front->next = p->next;
	if (p->next == NULL)
		rear = front;
	delete p;
	return x;
}



void main()
{
	link<int> s;
	if (s.Empty())
		cout << "队列为空" << endl;
	else
		cout << "队列非空" << endl;
	cout << "元素23,33,43,53,63入队操作"<<endl;
	try
	{
		s.Push(23);
		s.Push(33);
		s.Push(43);
		s.Push(53);
		s.Push(63);
	}
	catch (char *wrong)
	{
		cout << wrong << endl;
	}
	cout << "查看队头元素" << endl;
	cout << s.Gettop() << endl;
	cout << "执行出队操作" << endl;
	try
	{
		s.Pop();
	}
	catch (char *wrong)
	{
		cout << wrong << endl;
	}
	cout << "查看队头元素"<<endl;
	cout << s.Gettop()<< endl;
}

猜你喜欢

转载自blog.csdn.net/u011633428/article/details/80085908