# 算法与数据结构 链栈（C++）

2．随机产生10个100以内的整数建立一个链栈，从栈顶到栈底依次显示栈内元素；从键盘输入出栈元素个数 n (1<= n <=10)，将 n 个元素依次出栈并显示出栈元素，再显示此时栈顶元素；

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
template <typename DataType>
class Node {
public:
DataType data;
Node<DataType>* next;
};
template <typename DataType>
class LinkStack {
private:
Node<DataType>* top;
public:
LinkStack() : top(nullptr) {} // 构造函数初始化栈顶指针
void Push(DataType x);
DataType Pop();
void GenerateAndPushRandomNumbers(); // 生成随机数并压入链栈
void DisplayStack(); // 显示链栈元素
void PopAndDisplay(int n); // 出栈n个元素并显示
void DisplayTop(); // 显示栈顶元素
};
template <typename DataType>
void LinkStack<DataType>::Push(DataType x) {
Node<DataType>* newNode = new Node<DataType>;
newNode->data = x;
newNode->next = top;
top = newNode;
}
template <typename DataType>
DataType LinkStack<DataType>::Pop() {
if (top == nullptr) {
throw "下溢";
}
Node<DataType>* temp = top;
DataType x = top->data;
top = top->next;
delete temp;
return x;
}
template <typename DataType>
void LinkStack<DataType>::GenerateAndPushRandomNumbers() {
srand(time(nullptr)); // 初始化随机数种子
for (int i = 0; i < 10; ++i) {
int randomNumber = rand() % 100; // 生成0到99的随机数
Push(randomNumber);
}
}
template <typename DataType>
void LinkStack<DataType>::DisplayStack() {
Node<DataType>* current = top;
cout << "Elements in the stack (from top to bottom): ";
while (current != nullptr) {
cout << current->data << " ";
current = current->next;
}
cout << endl;
}
template <typename DataType>
void LinkStack<DataType>::PopAndDisplay(int n) {
for (int i = 0; i < n; ++i) {

DataType poppedElement = Pop();
cout << "Popped element: " << poppedElement << endl;
}
}
template <typename DataType>
void LinkStack<DataType>::DisplayTop() {
if (top != nullptr) {
cout << "Top element: " << top->data << endl;
}
else {
cout << "Stack is empty." << endl;
}
}
int main() {
LinkStack<int> stack;
stack.GenerateAndPushRandomNumbers(); // 生成随机数并压入链栈
stack.DisplayStack(); // 显示栈内元素
int n;
cout << "Enter the number of elements to pop (1-10): ";
cin >> n;
stack.PopAndDisplay(n); // 出栈并显示元素
stack.DisplayTop(); // 显示栈顶元素
return 0;
}


• 4
点赞
• 0
收藏
觉得还不错? 一键收藏
• 1
评论
04-08 94
07-12 239
01-09 215
12-02
05-19 607
05-15 633
05-16 708
05-19 635

### “相关推荐”对你有帮助么？

• 非常没帮助
• 没帮助
• 一般
• 有帮助
• 非常有帮助

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