数据结构 顺序栈、链栈(C++实现)

本文详细介绍了C++中顺序栈和链栈的模板类实现,包括栈的基本操作如判断空、满、获取顶元素、入栈和出栈,以及处理可能的溢出和下溢错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

顺序栈

头文件

#define MAX 20

enum status {
	success, overflow, underflow
};

template <class T>
class stack {
public:
	stack();
	bool isEmpty()const;
	bool isFull()const;
	status getTop(T& x)const;
	status push(const T x);
	status pop();
private:
	int count;
	int data[MAX];
};

源文件

#include"stack.h"

template <class T>
stack<T>::stack()
{
	count = 0;
}

template <class T>
bool stack<T>::isEmpty()const {
	return count == 0;
}

template <class T>
bool stack<T>::isFull()const {
	return count == MAX;
}

template <class T>
status stack<T>::getTop(T& x)const {
	if (isEmpty()) return underflow;
	x = data[count - 1];
	return success;
}

template <class T>
status stack<T>::push(const T x) {
	if (isFull()) return overflow;
	data[count] = x;
	count++;
	return success;
}

template <class T>
status stack<T>::pop() {
	if (isEmpty()) return underflow;
	count--;
	return success;
}

template <class T>
bool ReferenceError(status a) {
	if (a == overflow) {
		cout << "overflow!" << endl;
		return false;
	}
	if (a == underflow) {
		cout << "underflow!" << endl;
		return false;
	}
	return true;
}

链栈

enum status {
	success,failed
};

template<class T>
struct node {
	T data;
	node<T>* next;
};

template<class T>
class LinkedStack {
public:
	LinkedStack();
	~LinkedStack();
	bool isEmpty();
	status getTop(T& x);
	status push(T x);
	status pop();
private: 
	int count;
	node<T>* top;
};

template<class T>
LinkedStack<T>::LinkedStack() {
	top = nullptr;
	count = 0;
}
template<class T>
LinkedStack<T>::~LinkedStack() {
	while (!isEmpty()) pop();
}
template<class T>
bool LinkedStack<T>::isEmpty() {
	if (count==0) return true;
	else return false;
}
template<class T>
status LinkedStack<T>::getTop(T& x) {
	if (isEmpty()) return failed;
	else {
		x = top->data;
		return success;
	}
}
template<class T>
status LinkedStack<T>::push(T x) {
	node<T>* cur = new node<T>;
	cur->data = x;
	cur->next = top;
	top = cur;
	count++;
	return success;
}
template<class T>
status LinkedStack<T>::pop() {
	if (isEmpty()) {
		exit(0);
		return failed;
	}
	else {
		node<T>* cur = new node<T>;
		cur = top;
		top = top->next;
		delete cur;
		count--;
		return success;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值