【数据结构】(三)顺序栈(用异常捕获优化顺序栈,类模板实现顺序栈,两栈共享存储空间,栈的链式存储结构)

【数据结构】(三)顺序栈(用异常捕获优化顺序栈)

(一)异常处理的三种情况(以及执行流程):
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
注意:(异常出现情况):
在这里插入图片描述
(二)C++中异常类的使用:

定义:异常内部类
在这里插入图片描述
相比上次头文件的程序多异常类:
在这里插入图片描述
分文件如下:

#include "Stack.h"
     //**两种构造方法**//
Stack::Stack()     //初始化栈  无参构造大小为Max——SIZE
{
    
    
	size = MAX_SIZE;   
	top = -1;
	data = new char[MAX_SIZE];
}

Stack::Stack(int s)  //如果用有参函数构造,大小为传入的s
{
    
    
	size = s;
	top = -1;
	data = new char[size];
}

Stack::~Stack()   //释放栈
{
    
    
	delete[]data;
}

void Stack::push(char ch)
{
    
    
	if (isFull())   //如果满的话 ,丢出异常,执行丢出异常所该执行的catch语句
	{
    
    
		throw full();
	}
	else
	{
    
    
		data[++top] = ch;
	}
}

char Stack::pop()
{
    
    
	if (isEmpty())    //如果空,就丢出异常,执行对应的catch语句;
	{
    
    
		throw empty();
	}
	else
	{
    
    
		return data[top--];
	}
}

char Stack::getTop()  //获取当前栈顶的元素
{
    
    
	if (!isEmpty())    
	{
    
    
		return data[top];
	}
}

bool Stack::isEmpty()
{
    
    
	if (top == -1)
	{
    
    
		return true;
	}
	else
	{
    
    
		return false;
	}
}

bool Stack::isFull()
{
    
    
	if (top + 1 == size)  //因为top从0开始数
	{
    
    
		return true;
	}
	else
	{
    
    
		return false;
	}
}

void Stack::setNull()
{
    
    
	top = -1;
}

int main()
{
    
    
	Stack s1(2);
	char ch;
	try     //这一组的try和catch是用来测试输入的
	{
    
    
		s1.push('a');
		s1.push('b');
		s1.push('c');    //由于s1(2)定义的是二,所以输出第三个数是会导致异常
	}
	
	catch (Stack::full)  //那就抛出异常,输出所抛出异常要执行的程序
	{
    
    
		cout << "Stack Full!!" << endl;
	}
	try    //这一组是用来测试输出是否异常
	{
    
    
		ch = s1.pop();
		cout << ch << endl;
		ch = s1.pop();
		cout << ch << endl;
		ch = s1.pop();       //只能输出两个,输出第三个抛出异常
		cout << ch << endl;
	}
	catch (Stack::empty)   //抛出异常执行此语句
	{
    
    
		cout << "Stack empty!!" << endl;
	}
	return 0;
}

在这里插入图片描述
(三)类模板:
定义解释:使用了template 之后,将类里面的数据类型全部改变为Type,可以自定义使用数据类型,如右上角小图所讲Compare 则Type变为int 之类的
在这里插入图片描述
模板:定义和讲解:
在这里插入图片描述
在这里插入图片描述
注意:分文件写时一定要加入图中代码:
在这里插入图片描述

此时就可以用来了:在这里插入图片描述
在这里插入图片描述
(四)两栈共享存储空间:
在这里插入图片描述
在这里插入图片描述
当两个top分别指向两端时,top==-1,两栈为空。
在这里插入图片描述
当两个top相遇即满。
在这里插入图片描述
num表示处理的栈是那个栈:
在这里插入图片描述

插入操作:
在这里插入图片描述

删除:
在这里插入图片描述
(五)栈的链式存储结构:
在这里插入图片描述
在这里插入图片描述
构造函数:根据top按图索骥来next将所有的节点输出,
析构函数:同理以top来找到每一个节点来一 一删除,使用循环即可。
在这里插入图片描述
插入操作:
在这里插入图片描述
弹出操作:(将栈顶元素取出弹出)
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_51523386/article/details/115184710