stack.c
资源名称:c.rar [点击查看]
上传用户:shmaik
上传日期:2014-06-01
资源大小:45093k
文件大小:1k
源码类别:

VC书籍

开发平台:

C/C++

  1. static char rcsid[] = "$Id: H:/drh/idioms/book/RCS/inter.doc,v 1.11 1997/02/21 19:42:15 drh Exp $";
  2. #include <stddef.h>
  3. #include "assert.h"
  4. #include "mem.h"
  5. #include "stack.h"
  6. #define T Stack_T
  7. struct T {
  8. int count;
  9. struct elem {
  10. void *x;
  11. struct elem *link;
  12. } *head;
  13. };
  14. T Stack_new(void) {
  15. T stk;
  16. NEW(stk);
  17. stk->count = 0;
  18. stk->head = NULL;
  19. return stk;
  20. }
  21. int Stack_empty(T stk) {
  22. assert(stk);
  23. return stk->count == 0;
  24. }
  25. void Stack_push(T stk, void *x) {
  26. struct elem *t;
  27. assert(stk);
  28. NEW(t);
  29. t->x = x;
  30. t->link = stk->head;
  31. stk->head = t;
  32. stk->count++;
  33. }
  34. void *Stack_pop(T stk) {
  35. void *x;
  36. struct elem *t;
  37. assert(stk);
  38. assert(stk->count > 0);
  39. t = stk->head;
  40. stk->head = t->link;
  41. stk->count--;
  42. x = t->x;
  43. FREE(t);
  44. return x;
  45. }
  46. void Stack_free(T *stk) {
  47. struct elem *t, *u;
  48. assert(stk && *stk);
  49. for (t = (*stk)->head; t; t = u) {
  50. u = t->link;
  51. FREE(t);
  52. }
  53. FREE(*stk);
  54. }