编程实现链式堆栈,实现堆栈的压入和弹出。 提示:有两个类,一个是结点类,它包含结点值和指向下一结点的指针;另一个类是堆栈类,数据成员为堆栈的头指针,它是结点类的友元类。
时间: 2024-05-03 22:17:46 浏览: 28
下面是C++的链式堆栈的实现代码:
```cpp
#include <iostream>
using namespace std;
// 结点类
class Node {
public:
int value; // 结点值
Node *next; // 下一结点指针
};
// 堆栈类
class Stack {
public:
Stack() {
head = NULL;
}
~Stack() {
Node *temp;
while (head != NULL) {
temp = head;
head = head->next;
delete temp;
}
}
void push(int value) {
Node *newNode = new Node();
newNode->value = value;
newNode->next = head;
head = newNode;
}
int pop() {
if (head == NULL) {
return -1; // 堆栈为空,返回-1
}
Node *temp = head;
head = head->next;
int value = temp->value;
delete temp;
return value;
}
private:
Node *head; // 堆栈头指针
};
int main() {
Stack stack;
stack.push(1);
stack.push(2);
stack.push(3);
cout << stack.pop() << endl; // 3
cout << stack.pop() << endl; // 2
cout << stack.pop() << endl; // 1
cout << stack.pop() << endl; // -1
return 0;
}
```
在结点类中,我们只需要包含结点的值和指向下一结点的指针。在堆栈类中,我们需要定义一个头指针,它是结点类的友元类。在压入一个值时,我们新建一个结点,将它的指针指向当前的头指针,然后更新头指针。在弹出一个值时,我们需要检查堆栈是否为空,如果为空则返回-1,否则将头指针指向下一结点,并返回当前结点的值。在析构函数中,我们需要删除所有的结点。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)