很多资料都是带头结点的栈实现,感觉不带头结点实现也更容易啊。
// 有本句 ,下面cout 前面可以没有 std:: using namespace std; typedef char ElemType; //元素数据类型 char #define MAXSIZE 10 //普通链节点结构 typedef struct LinkNode { ElemType Data; struct LinkNode* Next; }LinkNode; //链栈结构 关键成员为指向链节点的指针 typedef struct LinkStack { LinkNode* Top; int Len; }*LS; //初始化 链结构成员赋初值 void InitLS(LS &S) { S = new LinkStack; S->Top = NULL; S->Len = 0; } //入栈 申请链节点,修改指针 void Push(LS& S,ElemType e) { LinkNode* t = new LinkNode; t->Data = e; t->Next = S->Top; S->Top = t; S->Len++; } //出栈 取数据,释放资源,修改指针 bool Pop(LS &S,ElemType &e) { LinkNode* p = S->Top; if (p){ e= p->Data; S->Top = p->Next; delete p; S->Len--; } else{ cout << " Empty! "; e = ' '; return 0; } } void main() { LS S; InitLS(S); Push(S, 'a'); Push(S, 'b'); Push(S, 'c'); Push(S, 'd'); ElemType e; Pop(S,e); cout <<"Pop " << e << " Len = "<< S->Len; cout << endl; Pop(S, e); cout << "Pop " << e << " Len = " << S->Len; cout << endl; Pop(S, e); cout << "Pop " << e << " Len = " << S->Len; cout << endl; Pop(S, e); cout << "Pop " << e << " Len = " << S->Len; cout << endl; Pop(S, e); cout << "Pop " << e << " Len = " << S->Len; cout << endl; }