关于堆栈的一些认识

特别注意:堆栈是一种先进后出(FILO)的数据类型,最后入栈的数据存放在编号为top-1的地址单元,也就是说,编号为top-1的地址单元存放的是最后入栈的数据,编号为top的单元永远都不会存数据。

#include <iostream>
#include <string>
#include "stack.h"

/*****
 * 关于堆栈的一点认识:设堆栈占用size个地址单元,但堆栈为空时,top=0,有一个元素时,top=1,数据放在编号为0的地址单元,以此类推,当堆栈满时,size=top
 * 因此:数据入栈时,先是将数据放到编号为top的单元(编号从0开始),然后top自加1
 *       数据出栈时,现将top自减1,然后数据出栈。编号为top的地址单元始终都没有数据
 ****/
Stack::Stack(int n)
{
	size = n;
	pitems = new Item [size];
	top = 0;
}

Stack::Stack(const Stack &st)  //复制构造函数
{
	pitems = new Item[st.size];
	size = st.size;
	top = 0;
	for(int i=0;i<st.top;i++)
	{
		pitems[i] = st.pitems[i];
	//	size++;
		top++;
	}
}

Stack::~Stack()
{
	delete [] pitems;
}
//空代表没有初始化堆栈,top=0
bool Stack::isempty() const
{
	return (top ? false:true); 
}

//堆栈满表示:top=size
bool Stack::isfull() const
{
	return (top == size)? true:false;
}

bool Stack::push(const Item & item)
{
	if(top == size) 
		return false;
	else 
	{		
		pitems[top] = item;
		top = top+1;
		return true;
	}
}

bool Stack::pop(Item & item)
{
	if(top == 0) 
		return false;
	else
	{
		top--;
		item = pitems[top];
		return true;
	}
}

Stack & Stack::operator=(const Stack & st)  //深度赋值
{
	if(this == & st)   //& 取地址
		return *this;
	else
	{
		delete [] pitems;
		pitems = new Item [st.size];
		size = 0;
		top = 0;
		for(int i=0;i<st.size;i++)
		{
			pitems[i] = st.pitems[i];
			size++;
			top++;
		}
		return *this;
	}
}

std::ostream & operator<<(std::ostream & os, const Stack & st)
{
	for(int i=0;i<st.top;i++)
	{
		os << st.pitems[i] << "\n";
	}
	return os;
}





堆栈是一种主存储器区域,它可以用来存储程序执行的中间状态、临时数据以及函数调用的参数和返回地址等。堆栈采用“先进后出”的存储方式,可以通过栈顶指针来实现元素的压入和弹出操作。在程序运行过程中,堆栈可以用来保存函数调用所需要的上下文信息,例如函数的返回地址、参数和局部变量等。每次函数调用时,都会在堆栈上分配一段空间,称为堆栈帧,用来保存函数调用过程中所需要的信息。当函数返回时,堆栈帧会被弹出,恢复上一级函数的上下文信息。 汇编语言提供了一些堆栈操作指令,例如PUSH、POP、CALL和RET等。其中,PUSH指令用来将数据压入堆栈,POP指令用来从堆栈中弹出数据。CALL指令用来调用函数,并将返回地址压入堆栈,RET指令用来从函数中返回,并将返回地址从堆栈中弹出。通过这些指令,汇编语言可以实现函数调用和返回的机制。 在函数调用过程中,参数和局部变量可以通过堆栈来传递和存储。对于参数,可以先将参数压入堆栈,然后在函数中使用POP指令将参数弹出到寄存器中。对于局部变量,可以在函数开头分配一段空间,称为堆栈帧,用来保存局部变量的值。在函数结束时,可以通过弹出堆栈帧来释放局部变量的空间。 总之,堆栈是程序中非常重要的数据结构之一,它可以用来保存函数调用的上下文信息、临时数据以及函数调用的参数和返回地址等。在汇编语言中,可以通过堆栈操作指令来实现函数调用和返回的机制,并可以使用堆栈来传递和存储参数和局部变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值