C++数据结构X篇_08_C++实现栈的顺序存储与链式存储
发布人:shili8
发布时间:2024-10-20 20:20
阅读次数:0
**C++数据结构X篇_08_C++实现栈的顺序存储与链式存储**
在前面的章节中,我们已经学习了栈的基本概念、运算以及应用。现在,我们将重点讨论如何使用C++来实现栈的顺序存储和链式存储。
**1. 栈的顺序存储**
栈的顺序存储是指在计算机内存中,使用一块连续的空间来存放栈元素。这种存储方式通常适用于小规模数据或固定大小的栈。
###1.1 顺序栈的实现
cpp#include <iostream> class Stack { private: int* elements; // 栈元素数组 int top; // 栈顶指针 int capacity; // 栈容量public: Stack(int capacity) : capacity(capacity), top(-1) { elements = new int[capacity]; } ~Stack() { delete[] elements; } bool isEmpty() const { return top == -1; } bool isFull() const { return top == capacity -1; } void push(int element) { if (isFull()) { std::cerr << "栈已满!" << std::endl; return; } elements[++top] = element; } int pop() { if (isEmpty()) { std::cerr << "栈为空!" << std::endl; return -1; // 返回-1表示出错 } return elements[top--]; } int peek() const { if (isEmpty()) { std::cerr << "栈为空!" << std::endl; return -1; // 返回-1表示出错 } return elements[top]; } };
###1.2 使用示例
cppint main() { Stack stack(5); stack.push(10); stack.push(20); stack.push(30); std::cout << "栈顶元素:" << stack.peek() << std::endl; int popped = stack.pop(); std::cout << "弹出元素:" << popped << std::endl; return0; }
**2. 栈的链式存储**
栈的链式存储是指在计算机内存中,使用一个个独立的结点来存放栈元素。这种存储方式通常适用于大规模数据或动态大小的栈。
###2.1 链式栈的实现
cpp#include <iostream> class Node { public: int data; Node* next; Node(int data) : data(data), next(nullptr) {} }; class Stack { private: Node* top; // 栈顶指针public: Stack() : top(nullptr) {} ~Stack() { while (top != nullptr) { Node* temp = top; top = top->next; delete temp; } } bool isEmpty() const { return top == nullptr; } void push(int element) { Node* newNode = new Node(element); if (isEmpty()) { top = newNode; } else { newNode->next = top; top = newNode; } } int pop() { if (isEmpty()) { std::cerr << "栈为空!" << std::endl; return -1; // 返回-1表示出错 } Node* temp = top; top = top->next; delete temp; return0; } int peek() const { if (isEmpty()) { std::cerr << "栈为空!" << std::endl; return -1; // 返回-1表示出错 } return top->data; } };
###2.2 使用示例
cppint main() { Stack stack; stack.push(10); stack.push(20); stack.push(30); std::cout << "栈顶元素:" << stack.peek() << std::endl; int popped = stack.pop(); std::cout << "弹出元素:" << popped << std::endl; return0; }
以上是C++实现栈的顺序存储和链式存储的示例代码。顺序栈使用一块连续的空间来存放栈元素,而链式栈则使用一个个独立的结点来存放栈元素。两种实现方式都支持基本的栈操作,如push、pop和peek。