用数组结构实现栈和队列------------使用辅助的数据,可以很简单的实现

本文详细介绍如何使用数组结构来实现队列和栈这两种基本的数据结构。通过定义模板类my_queue和my_stack,实现了push、pull及front等关键操作,并处理了溢出和下溢的情况。适用于计算机科学和数据结构学习。

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

栈:我只需要记录,每一次push后数组的最后一个位置end和此时数组里实际装的个数num;如果end超过数组容量就显示满了;否则end++

pull时,就end--;如果num==0;则说明栈空了

队列也是一样,我只需要每次记录第一个位置start,和末尾元素的位置end,和此时元素个数num,pull时就start++;num++;

如果start正好等于容量,就start=0;即循环利用数组;当然num--;如果num==0;则为空;

push时,就end++;num满了就报错;否则end++,若end==容量,就使end=0;循环利用

//用数组结构实现队列
template<typename T>
struct my_queue {
	int arr_size;
	my_queue(int sz = 0) :arr_size(sz), start(0),end(0),num(0){
		arr = new T[sz];
	}

	void push(T e) ;
	
	T pull() ;

	T& front() const;

	T& front() ;


	~my_queue() {
		delete arr;
	};
private:
	T *arr;
	size_t start;
	size_t end;
	size_t num;
};

template<typename T>
void my_queue<T>::push(T e) 
{
	if (num == arr_size) {
		throw out_of_range("满了!!!");
	}
	else {
		arr[end++] = e;
		num++;
		if (end == arr_size)	end = 0;
	}
}

template<typename T>
T my_queue<T>::pull() 
{
	if (num == 0)
	{
		throw out_of_range("空了!!!");
	}
	else {
		T res = arr[start];
		start++;
		num--;
		if (start == arr_size)	start = 0;
		return res;
	}
	
}


template<typename T>
T& my_queue<T>::front() const
{
	if (num == 0)
	{
		throw out_of_range("NOTHING");
	}
	else return arr[start];
}

template<typename T>
T& my_queue<T>::front() 
{
	if (num == 0)
	{
		throw out_of_range("NOTHING");
	}
	else return arr[start];
}


//用数组结构实现栈
template<typename T>
struct my_stack {
	int arr_size;
	my_stack(int sz = 0) :arr_size(sz), end(0),num(0){
		arr = new T[sz];
	}

	void push(T e);

	T pull() ;

	T& front()const;
	
	T& front() ;

	~my_stack() {
		delete arr;
	};
private:
	T *arr;
	size_t end;
	size_t num;
};

template<typename T>
T& my_stack<T>::front() const
{
	if (num == 0)
	{
		throw out_of_range("NOTHING");
	}
	else return arr[end-1];
}

template<typename T>
T& my_stack<T>::front() 
{
	if (num == 0)
	{
		throw out_of_range("NOTHING");
	}
	else return arr[end-1];
}


template<typename T>
void my_stack<T>::push(T e) 
{
	if (end== arr_size) {
		throw out_of_range("满了!!!");
	}
	else {
		num++;
		arr[end++] = e;
	}

}

template<typename T>
T my_stack<T>::pull() 
{
	if (end == 0)
	{
		throw out_of_range("空了!!!");
	}
	else {
		T res = arr[end--];
		num--;
		return res;
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值