鏈棧的實現
阿新 • • 發佈:2017-08-19
aps log 隨心所欲 class stdlib.h none data type create
鏈棧即鏈式棧,也就是說我們不用再考慮空間的大小,可隨心所欲的進行數據的插入/刪除了。和順序棧一樣,仍然要保持其stack的特性,只在一端進行插入和刪除,後進先出。
示例代碼:
#ifndef _LINKSTACK_H #define _LINKSTACK_H typedef int ElemType; typedef int Status; typedef struct linkStack { ElemType data; struct linkStack * top; }linkStack; linkStack * CreateStack(); Status MakeEmpty();linkstack.hint IsEmpty(); Status Push(); Status Pop(); ElemType Top(); #endif
/* linkstack.c */ #include <stdio.h> #include <stdlib.h> #include "linkstack.h" linkStack * CreateStack() { linkStack * S; S = (linkStack *)malloc(sizeof(linkStack)); S -> top = NULL; MakeEmpty(S);LinkStack.creturn S; } Status MakeEmpty(linkStack * S) { if(S == NULL) { return FALSE; } else { while(!IsEmpty(S)) Pop(S); } return TRUE; } int IsEmpty(linkStack * S) { return S -> top == NULL; } Status Push(linkStack * S, ElemType Data) { linkStack* p; p = (linkStack *)malloc(sizeof(linkStack)); p -> data = Data; p -> top = S -> top; S -> top = p; return TRUE; } Status Pop(linkStack * S) { linkStack * p; if(IsEmpty(S)) return FALSE; p = S -> top; S -> top = S -> top -> top; free(p); return TRUE; } ElemType Top(linkStack * S) { return S -> top -> data; }
鏈棧的實現