实现功能(LIFO算法):
1.入栈push()
2.出栈pop()
3.获取栈顶top()
4.查询栈的所有元素select()
以下C++代码采用尾插法推入与尾插法推出,使得符合后进先出(LIFO)规则:
#include<iostream>
using namespace std;
class MyStack {
private:
struct ListNode {
int data;
ListNode* next;
};
ListNode* head;
public:
MyStack() {
head = nullptr;
}
~MyStack() {//采用头删法析构
if(!head) return;
ListNode* now = head;
ListNode* next = nullptr;
while(now->next){
next = now->next;
delete now;
now = next;
}
delete now;
now = nullptr;
}
ListNode* CreateNode(int value) {
ListNode* newNode = new ListNode;
newNode->data = value;
newNode->next = nullptr;
return newNode;
}
//推入数据(尾插)
void push(int value) {
ListNode* newNode = CreateNode(value);
if (!head) {
head = newNode;
} else {
ListNode* temp = head;
while (temp->next) {
temp = temp->next;
}
temp->next = newNode;
}
}
//推出数据(尾删)
void pop() {
if (!head) {
cout << "栈为空,无法再推出数据!!" << endl;
} else {
ListNode* prev = nullptr;
ListNode* now = head;
while (now->next) {
prev = now;
now = now->next;
}
if (prev) {
prev->next = nullptr;
}
if (now == head) {
head = nullptr;
}
delete now;
now = nullptr;
}
}
//查询栈顶
void top() {
if (!head) {
cout << "栈为空!!没有栈顶!!" << endl;
return;
}
ListNode* temp = head;
while (temp->next) {
temp = temp->next;
}
cout<<"top: "<<temp->data<<endl;
}
//查询全部数据
void select() {
if (!head) {
cout << "栈为空!!" << endl;
return;
}
ListNode* temp = head;
while (temp) {
cout<<temp->data << " ";
temp = temp->next;
}
cout << endl;
}
};
int main() {
MyStack myStack;
for (int i = 0; i <= 8; i++) {
myStack.push(i);
}
for (int i = 0; i <= 1; i++) {
myStack.pop();
}
myStack.top();
myStack.select();
return 0;
}
运行效果: