栈(指针

#include<iostream>
#define stack_size 10
using namespace std;
struct Node
{
	int val;
	Node * next;
};
class Stack
{
public:

	Stack();
	~Stack();
	void Push(int);
	int Pop();
	bool Empty() { return !size; }
	int Size() { return size;  }

private:
	Node node;
	Node *top;
	int size = 0;

	//Node *top;
};

int main() {

	Stack S;
	S.Push(1);
	S.Push(2);
	S.Push(2);
	for (int i = 0; i < 3; i++) {
		std::cout << S.Pop()<<" ";
	}
	std::cout << endl;
	return 0;
}
Stack::Stack()
{
	node.next = NULL;
	node.val = 0;
	top = &node;
}

Stack::~Stack()
{
	for (; top != &node;) {
		Node *ptr = top;
		top = top->next;
		delete ptr;
	}
}
void Stack::Push(int n)
{
	Node *temp = new Node;
	temp->val = n;
	temp->next = top;
	top = temp;
	size++;
}
int Stack::Pop() {
	if (top == &node) {
		return -1;
	}
	int temp = top->val;
	Node * ptr = top;
	top = top->next;
	delete ptr;
	size--;
	return temp;
}
### 指针的定义及用途 #### 定义 指针(Stack Pointer,SP)是一个特殊的硬件寄存器,用于指示当前线程或进程中顶的位置。它通常存储的是内存地址,指向程序运行过程中动态分配的数据结构——的顶部位置[^1]。 在大多数计算机体系结构中,是一种后进先出(LIFO, Last In First Out)的数据结构,主要用于管理函数调用期间临时变量、返回地址以及参数传递等内容。每当有新的数据压入时,指针会向下移动;当数据弹出时,指针则向上移动。这种机制使得成为一种高效且易于实现的数据结构。 --- #### 指针的作用 ##### 1. **管理局部变量** 指针的主要功能之一是在函数执行过程中为局部变量提供存储空间。每次进入一个新的函数调用时,编译器会在上预留足够的空间来保存该函数所需的局部变量和其他上下文信息。这些操作通过调整指针完成,从而确保每个活动记录都独立存在并能够被正确访问[^2]。 ##### 2. **处理子程序调用与返回** 除了存储局部变量外,还负责保存过程间跳转的关键信息,比如返回地址。当发生函数调用时,CPU将下一条指令的地址推送到中,并更新指针以反映新状态。待目标函数完成后,控制流依据先前存储于内的返回地址恢复到原点继续执行[^3]。 ##### 3. **保护现场和恢复现场** 为了防止中断或其他异步事件破坏正在运行的任务环境,操作系统或者处理器核心可能需要利用暂存一些重要的通用寄存器值以及其他敏感资源描述符。这一系列动作被称为“保护现场”。同样地,“恢复现场”指的是重新加载之前备份的内容以便恢复正常流程。整个过程中都需要依赖精确维护好的指针定位相应区域[^4]。 ##### 4. **支持异常处理机制** 现代计算平台普遍具备完善的错误检测能力,一旦探测到非法操作等情况便会触发相应的例外响应逻辑。此时往往也需要借助作为媒介存放关于此次事故的具体细节报告给更高层的应用开发者去分析解决办法。因此可以说良好的设计对于构建健壮可靠的软件生态系统至关重要[^5]。 --- ### 示例代码展示如何使用指针 下面给出了一段简单的C语言示例演示了递归算法里隐含着对的操作原理: ```c #include <stdio.h> void recursive_function(int depth) { printf("Current Depth: %d\n", depth); if(depth > 0){ // Each function call pushes new frame onto stack. recursive_function(depth - 1); } } int main(){ int initial_depth = 5; recursive_function(initial_depth); return 0; } ``` 在这个例子当中,随着`recursive_function()`不断自我调用,每一次都会创建属于自己的作用域并将有关参数传进去形成所谓的帧(Frame),而这一切背后实际上就是依靠修改指针达成目的。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值