鏈棧的實現:注意 指針的方向 跟 單鏈表是反着的,其中S為頭指針,為空時頭指針==NULL
//鏈棧的創建實現---是運算受限的單鏈表,只能在鏈表頭部進行操作 typedef struct StackNode { int data; struct StackNode *next; }StackNode,*LinkStack; LinkStack S;
入棧操作:
//鏈棧的入棧 bool PushLinkStack(LinkStack &s, int e) { StackNode *p = new StackNode; p->data = e; p->next = s; p = s; return true; }
鏈棧的刪除-出棧:
//鏈棧的出棧 bool PopLinkStack(LinkStack &s, int &e) { StackNode *p; if (s == NULL) return false; e = s->data; p = s; s = s->next; delete p; return true; }
最終版代碼:
//鏈棧的創建實現---是運算受限的單鏈表,只能在鏈表頭部進行操作 typedef struct StackNode { int data; struct StackNode *next; }StackNode,*LinkStack; LinkStack S; //鏈棧的初始化 void InitLinkStack(LinkStack &s) { //棧頂指針(頭指針置為空) s = NULL; } //判斷鏈棧是否為空 bool EmptyListStack(LinkStack s) { if (s == NULL) return true; } //鏈棧的入棧 bool PushLinkStack(LinkStack &s, int e) { StackNode *p = new StackNode; p->data = e; p->next = s; s = p;//將棧頂指針指向新結點 return true; } //鏈棧的出棧 bool PopLinkStack(LinkStack &s, int &e) { StackNode *p; if (s == NULL) return false; e = s->data; p = s; s = s->next; delete p; return true; } //取棧頂元素 int GetLinkStackTop(LinkStack s) { if (s != NULL) return s->data; }