数据结构学习笔记(C++):栈的链式存储结构

本程序主要体现了线性表的链式存储结构,主要实现了以下几个功能:

//压栈

//出栈

//取栈顶

//判断栈是否为空

下面是代码,如有不足的地方还请各位大佬多多指正:

//数据结构学习笔记(C++):栈的链式存储结构 
#include<iostream>
using namespace std;

class linkStack{	 
public:
	struct Node
	{
		int data;
		Node *next;
	};
	
public:
	linkStack();//构造函数
	~linkStack();//析构函数

public:
	void Push(int x);//压栈	
	int Pop();//弹栈
	int getTop();//取栈顶
	bool isEmpty();//判空函数

private:
	Node *top;//栈帧 
};
//1
linkStack::linkStack()//构造函数
{
	//因为链栈是不具有头节点的,所以直接让栈帧为空即可
	top = NULL; 
}
//2
linkStack::~linkStack()//析构函数
{
	Node* p = NULL;//定义工作指针 
	while(top!=NULL)
	{
		p = top;
		top = top->next;
		delete p;
	}
}
//3
void linkStack::Push(int x)//压栈操作
{
	Node *s = NULL;
	s = new Node;
	s->data = x;
	s->next = top;
	top = s;
}
//4
int linkStack::Pop()//弹栈操作
{
	Node *p = NULL;
	int x;
	if(top == NULL) throw "下溢";
	x = top->data;
	p = top;
	top = top->next;
	delete p;
	return x;
}
//5
int linkStack::getTop()//取栈顶 
{
	return top->data;
}
//6
bool linkStack::isEmpty()//判断栈是否为空
{
	if(top == NULL)
		return true;
	else
		return false;
} 

int main()
{
	linkStack stack;
	char command;
	int x;
	try{
		while(cin>>command)
		{
			if(command == 'Q')
				return 0;
			switch(command)
			{
				case 'P'://压栈 
					cout<<"输入要压入的元素";
					cin>>x;
					stack.Push(x);
					cout<<"压栈完成。"<<endl;	
					break;
				case 'C'://出栈 
					cout<<stack.Pop()<<endl;
					break;
				case 'G'://取栈顶 
					cout<<stack.getTop()<<endl;
					break;		
				case 'E'://判断栈是否为空 
					cout<<(stack.isEmpty()?"yes":"no")<<endl;
					break; 
			}
		}
	}catch(const char * str)
	{
		cout<<str<<endl;
	}
	return 0;
}

上一篇:iOS开发 iOS10推送必看(基础篇)-转


下一篇:《贝叶斯思维:统计建模的Python学习法》一1.6 M&M豆问题