sqStack.cpp
#include <iostream>
#include "Stack.h"
using namespace std;
int main() {
LinkStack<char> s1;
s1.push('a');
s1.push('b');
s1.push('c');
cout << s1.getTop()<<endl;
cout<<s1.pop()<<endl;
cout<<s1.pop()<<endl;
cout<<s1.pop()<<endl;
if (s1.isEmpty()){
cout<<"Stack is empty!"<<endl;
}
return 0;
}
Stack.cpp
#include <iostream>
#include "Stack.h"
template<class T>
LinkStack<T>::LinkStack() {
top = NULL;
};
//析构函数,用于处理善后工作,将链栈删除
template<class T>
LinkStack<T>::~LinkStack() {
while (NULL != top) {
struct Node<T> *p = top;
top = top->next;
delete p;
}
}
//入栈
template<class T>
void LinkStack<T>::push(T x) {
struct Node<T> *p = new Node<T>;
p->data = x;
p->next = top;
top = p;
}
//出栈
template<class T>
T LinkStack<T>::pop() {
if (NULL == top) return -1;
T m = top->data;
struct Node<T> *p = top;
top = top->next;
delete p;
return m;
}
//获取栈顶元素,不弹出,不改变数值
template<class T>
T LinkStack<T>::getTop() {
if (NULL == top) return -1;
return top->data;
}
template<class T>
bool LinkStack<T>::isEmpty() {
if(NULL == top) return true;
else return false;
}
template
class LinkStack<char>; //类模板分文件必须加这一句
Stack.h
//
// Created by 63400 on 2021/10/30.
//
#ifndef HOMEWORK_STACK_H
#define HOMEWORK_STACK_H
#include <iostream>
using namespace std;
template<class T>
struct Node{
T data;
struct Node<T> * next;
};
template<class T>
class LinkStack{
private:
struct Node<T> * top;
public:
LinkStack();
~LinkStack();
void push(T x);
T pop();
T getTop();
bool isEmpty();
};
#endif //HOMEWORK_STACK_H
不要边看边写,要先看完,再写。卡住了再去看。
感觉今天早上相较于之前有点进步了。