用链表实现入栈,出栈等操作。
#pragma once templateclass CMyStack_list { struct MyNode { T data; MyNode* pNext; }; MyNode* pHead; public: CMyStack_list(); ~CMyStack_list(); CMyStack_list(CMyStack_list const& other); void clear(); bool empty() const; void push(T const& data); void pop(); T getTop() const{ return pHead->data; } CMyStack_list & operator =(CMyStack_list const& srcStack); }; template CMyStack_list & CMyStack_list ::operator =(CMyStack_list const& srcStack) { clear(); if (srcStack.pHead) { pHead = new MyNode; pHead->data = srcStack.pHead->data; pHead->pNext = nullptr; MyNode* pCurOther = srcStack.pHead; MyNode* pCurHead = pHead; while (pCurOther->pNext) { pCurHead->pNext = new MyNode; pCurHead->pNext->data = pCurOther->pNext->data; pCurHead->pNext->pNext = nullptr; pCurOther = pCurOther->pNext; pCurHead = pCurHead->pNext; } } } template void CMyStack_list ::pop() { MyNode* pTemp = pHead; pHead = pHead->pNext; delete pTemp; } template void CMyStack_list ::push(T const& data) { MyNode* tmpNode = new MyNode; tmpNode->data = data; tmpNode->pNext = pHead; pHead = tmpNode; } template bool CMyStack_list ::empty() const { return pHead == nullptr; } template CMyStack_list ::CMyStack_list(CMyStack_list const& other) { pHead = nullptr; if (other.pHead) { pHead = new MyNode; pHead->data = other.pHead->data; pHead->pNext = nullptr; MyNode* pCurOther = other.pHead; MyNode* pCurHead = pHead; while (pCurOther->pNext) { pCurHead->pNext = new MyNode; pCurHead->pNext->data = pCurOther->pNext->data; pCurHead->pNext->pNext = nullptr; pCurOther = pCurOther->pNext; pCurHead = pCurHead->pNext; } } } template void CMyStack_list ::clear() { MyNode* tmp; while (pHead) { tmp = pHead; pHead = pHead->pNext; delete tmp; } } template CMyStack_list ::~CMyStack_list() { clear(); } template CMyStack_list ::CMyStack_list() { pHead = nullptr; }
主函数:
#include "MyStack_list.h"
int main() {
CMyStack_list myStack;
for (size_t i = 0; i < 10; i++) {
myStack.push(i + 1);
}
myStack.getTop();
myStack.pop();
for (size_t i = 0; i < 10; i++) {
printf("%dt", myStack.getTop());
myStack.pop();
}
printf("n");
return 0;
}



