C++使用链表实现栈
由于栈是先进后出的特征,入栈操作可转化为在链表头插入元素,出栈操作可转化为删除链表头结点,因此只需要一个链接结点即可表示栈,然后再用一个整型变量n表示栈的长度。
代码如下:
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
// 链表节点
struct ListNode {
int val;
ListNode* next;
ListNode() :val(0), next(nullptr) {}
ListNode(int a) :val(a), next(nullptr) {}
ListNode(int a,ListNode* b) :val(a), next(b) {}
};
// 使用链表实现栈
class myStack {
public:
myStack() :n(0), head(nullptr) {}
// push
void push(int val) {
// 头插法添加链表节点
ListNode* temp = new ListNode(val);
temp->next = head;
head = temp;
n++;
}
// pop
void pop() {
if (n == 0) return;
ListNode* temp = head->next;
delete head;
head = temp;
n--;
}
// top
int top() {
if (n == 0) return -1;
return head->val;
}
// size
int size() {
return n;
}
// isEmpty
bool isEmpty(){
return n == 0 ? true : false;
}
private:
int n; // 链表长度,栈中元素个数
ListNode* head; // 链表头节点
};
void test() {
myStack ms;
ms.push(1);
cout << ms.top() << " ";
ms.push(2);
cout << ms.top() << " ";
ms.push(3);
cout << ms.top() << " ";
ms.push(4);
cout << ms.top() << " ";
ms.push(5);
cout << ms.top() << endl;
cout << "元素个数: " << ms.size() << endl;
ms.pop();
cout << ms.top() << " ";
ms.pop();
cout << ms.top() << " ";
ms.pop();
cout << ms.top() << " ";
ms.pop();
cout << ms.top() << " ";
ms.pop();
cout << ms.top() << endl;
cout << "元素个数: " << ms.size() << endl;
}
int main() {
test();
return 0;
}
结果: