check_stack2.c
上传用户:janny_wxd
上传日期:2010-02-03
资源大小:261k
文件大小:1k
源码类别:

控制台编程

开发平台:

C/C++

  1. #include<stdio.h>
  2. //#include<string.h>
  3. #include<stdlib.h>
  4. #define OK 1
  5. #define TRUE 1
  6. #define FALSE 0
  7. #define ERROR 0
  8. #define OVERFLOW -2
  9. #define STACK_INIF_SIZE 50
  10. #define STACKINCREMENT 10
  11. typedef int status;
  12. typedef struct sqstack{
  13. int *base;
  14. int *top;
  15. int stacksize;
  16. }sqstack;
  17. status *initstack(sqstack *s){
  18. (s)->base = (int*)malloc(STACK_INIF_SIZE*sizeof(int));
  19. if((s)->base==NULL) exit(OVERFLOW);
  20. (s)->top=(s)->base;
  21. (s)->stacksize = STACK_INIF_SIZE;
  22. printf("initstack is finished!n");
  23. return OK;
  24. }
  25. int gettop(sqstack *s){
  26. int e;
  27. if(s->top==s->base){
  28.  printf("NULL1n");
  29.  return 0;
  30.  }
  31. e=*(s->top-1);
  32. printf("gettop %d is OK!n",e);
  33. return e;
  34. }
  35. status push(sqstack *s,int e){
  36. if(s->top-s->base>=s->stacksize){
  37. s->base=(int*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(int));
  38. if(!s->base) exit(OVERFLOW);
  39. s->stacksize+= STACKINCREMENT;
  40. }
  41. *(s->top++)=e;
  42.     printf("push %d is OKn",e);
  43. return OK;
  44. }
  45. status pop(sqstack *s,int *e){
  46. if(s->top==s->base){
  47. printf("NULL2n");
  48. return ERROR;
  49. }
  50. *e=*(--(s->top));
  51.     printf("pop %d is OK!n",*e);
  52. return OK;
  53. }
  54. void main(){
  55. int b,e;
  56. char a='a',ch;
  57. sqstack s;
  58. initstack(&s);
  59. push(&s,a);
  60. b=gettop(&s);
  61. pop(&s,&e);
  62. printf("b is %dn",b);
  63. ch=a;
  64. printf("%cn",ch);
  65. }