#include#include #include typedef int DataType; typedef struct SNode { DataType data; struct SNode * next; }*linkStack; bool Init_Stack(linkStack * Top); // 栈初始化(不带头结点) bool Push_Stack(linkStack * Top, DataType x); // 入栈 bool Pop_Stack(linkStack * Top, DataType * x); // 出栈 int GetTop_Stack(linkStack Top); // 获取栈顶元素 bool Destroy_Stack(linkStack * Top); // 销毁栈 bool Traverse_Stack(linkStack Top); // 遍历栈 bool Empty_Stack(linkStack Top); // 判栈空 int main() { DataType x; linkStack S; if(Init_Stack(&S)) printf("链栈初始化成功!n"); else printf("链栈初始化失败!n"); Push_Stack(&S,1); Push_Stack(&S,4); Push_Stack(&S,7); Push_Stack(&S,2); Push_Stack(&S,5); Push_Stack(&S,8); Push_Stack(&S,3); Push_Stack(&S,6); Push_Stack(&S,9); printf("遍历链栈:"); Traverse_Stack(S); printf("nn"); printf("栈顶元素:%dnn",GetTop_Stack(S)); if(Pop_Stack(&S, &x)) { printf("出栈成功!n"); printf("您出栈的元素:%dn",x); } else printf("出栈失败!n"); printf("遍历链栈:"); Traverse_Stack(S); printf("nn"); if(Destroy_Stack(&S)) printf("销毁成功!n"); else printf("销毁失败!n"); printf("遍历链栈:"); Traverse_Stack(S); return 0; } // 注意防止产生空指针 bool Init_Stack(linkStack * Top) { *Top = NULL; // 空栈时,栈顶指针指向空 return true; } // 注意防止产生空指针 bool Push_Stack(linkStack * Top, DataType x) { printf("入栈元素:%dn",x); linkStack p = (linkStack)malloc(sizeof(struct SNode)); if(!p) { printf("申请空间失败!n"); exit(-1); } p->data = x; p->next = *Top; *Top = p; return true; } // 注意防止产生空指针 bool Pop_Stack(linkStack * Top, DataType * x) { if(Empty_Stack(*Top)) return false; linkStack p = *Top; *x = p->data; *Top = p->next; free(p); p = NULL; return true; } int GetTop_Stack(linkStack Top) { if(Empty_Stack(Top)) return false; return Top->data; } // 注意防止产生空指针 bool Destroy_Stack(linkStack * Top) { linkStack p = *Top; while(*Top) { p = p->next; free(*Top); *Top = p; } return true; } bool Traverse_Stack(linkStack Top) { linkStack p = Top; while(p) { printf("%3d",p->data); p = p->next; } return true; } bool Empty_Stack(linkStack Top) { if(Top==NULL) return true; else return false; }



