diff --git a/_02.栈与队列/03链栈_LinkStack.c b/_02.栈与队列/03链栈_LinkStack.c index 122750f..eab6b45 100644 --- a/_02.栈与队列/03链栈_LinkStack.c +++ b/_02.栈与队列/03链栈_LinkStack.c @@ -140,5 +140,6 @@ int main() printf("Õ»¶¥ÔªËØ e=%d Õ»µÄ³¤¶ÈΪ%d\n",e,StackLength(s)); ClearStack(&s); printf("Çå¿ÕÕ»ºó£¬Õ»¿Õ·ñ£º%d(1:¿Õ 0:·ñ)\n",StackEmpty(s)); + getchar(); return 0; } \ No newline at end of file diff --git a/_02.栈与队列/_c.链栈.c b/_02.栈与队列/_c.链栈.c index cd63dc7..1c733d7 100644 --- a/_02.栈与队列/_c.链栈.c +++ b/_02.栈与队列/_c.链栈.c @@ -2,7 +2,7 @@ * @Author: Xu Bai * @Date: 2019-07-01 21:32:41 * @LastEditors: Xu Bai - * @LastEditTime: 2019-07-01 21:39:07 + * @LastEditTime: 2019-07-01 22:12:36 */ #include "stdio.h" #include "stdlib.h" @@ -46,3 +46,110 @@ Status InitStack(LinkStack *S) S->count = 0; return OK; } + +Status ClearStack(LinkStack *S) +{ + LinkStackPtr p, q; + p = S->top; + while (p) + { + q = p; + p = p->next; + free(q); + } + S->count = 0; + return OK; +} + +Status StackEmpty(LinkStack S) +{ + if (S.count == 0) + { + return TRUE; + } + else + { + return FALSE; + } +} + +int StackLength(LinkStack S) +{ + return S.count; +} + +Status GetTop(LinkStack S, ElemType *e) +{ + LinkStackPtr p; + if (S.top == NULL) + { + return ERROR; + } + else + { + *e = S.top->data; + } + return OK; +} + +Status Push(LinkStack *S, ElemType e) +{ + LinkStackPtr s = (LinkStackPtr)malloc(sizeof(StackNode)); + s->data = e; + s->next = S->top; + S->top = s; + S->count++; + return OK; +} + +Status Pop(LinkStack *S, ElemType *e) +{ + if (StackEmpty(*S)) + { + return ERROR; + } + LinkStackPtr p; + *e = S->top->data; + p = S->top->next; + S->top->next = p->next; + free(p); + S->count--; + return OK; +} + +Status StackTraverse(LinkStack S) +{ + LinkStackPtr p; + p = S.top; + while (p) + { + visit(p->data); + p = p->next; + } + printf("\n"); + return OK; +} + +int main() +{ + LinkStack s; + ElemType e; + InitStack(&s); + int i; + for (i = 1; i <= 10; i++) + { + Push(&s, i); + } + printf("Traverse:\n"); + StackTraverse(s); + Pop(&s, &e); + printf("pop:\n"); + StackTraverse(s); + printf("the elem:%d\n", e); + ClearStack(&s); + printf("clear!"); + StackTraverse(s); + + getchar(); + return OK; +} \ No newline at end of file diff --git a/a.out b/a.out index 4dee120..3fc0a2c 100644 Binary files a/a.out and b/a.out differ