代码如下:
#include <iostream>
using namespace std;typedef int ElemType;typedef struct SNode
{ElemType data;SNode *next;
}SNode;typedef struct
{SNode *top;
}SqStack;bool initStack(SqStack &s)
{s.top = nullptr;return true;
}bool destroyStack(SqStack &s)
{SNode *q = nullptr;while (s.top){q = s.top;s.top = s.top->next;delete q;}s.top = nullptr;return true;
}bool stackEmpty(SqStack s)
{if (!s.top) return true;return false;
}int stackLength(SqStack s)
{int j = 0;SNode *q = s.top;while (q){j++;q = q->next;}return j;
}bool getTop(SqStack s, ElemType &e)
{if (s.top){e = s.top->data;return true;}return false;
}bool push(SqStack &s, ElemType e)
{SNode *q = new SNode;if (!q) return false;q->data = e;q->next = s.top;s.top = q;return true;
}bool pop(SqStack &s, ElemType &e)
{if (s.top){SNode *q = s.top;s.top = s.top->next;e = q->data;delete q;return true;}return false;
}void vis(ElemType e)
{cout << e << " ";
}void stackTraverse(SqStack s, void(*visit)(ElemType))
{SNode *q = s.top;SqStack s1;initStack(s1);while (q){push(s1, q->data);q = q->next;}ElemType a;while (!stackEmpty(s1)){pop(s1, a);visit(a);}destroyStack(s1);
}int main()
{SqStack s;initStack(s);int n;int a;cin >> n;for (int i = 0; i < n; i++){cin >> a;push(s, a);}getTop(s, a);cout << "a = " << a << endl;stackTraverse(s, vis);cout << endl;pop(s, a);pop(s, a);stackTraverse(s, vis);cout << endl;cout << stackLength(s) << endl;return 0;
}