1. #ifndef _LINKEDSTACK_H 
  2. #define _LINKEDSTACK_H 
  3.  
  4. typedef char ElemType;  
  5. typedef struct linknode 
  6. ElemType data; 
  7. struct linknode *next; 
  8. }LiStack; 
  9.  
  10. LiStack *InitStack(LiStack *lst); 
  11. int StackEmpty(LiStack *lst); 
  12. int Push(LiStack *lst, ElemType e); 
  13. int Pop(LiStack *lst, ElemType *e); 
  14.  
  15. #endif  
  16.  
  17.   
  18.  
  19. #include <stdio.h> 
  20. #include "stdlib.h" 
  21. #include "LinkedStack.h" 
  22.  
  23. LiStack *InitStack(LiStack *lst) 
  24. if(lst == NULL) 
  25. {    
  26. lst = (LiStack *)malloc(sizeof(LiStack)); 
  27. lst->next = NULL; 
  28. return lst; 
  29. }else  
  30. return lst; 
  31. /* 
  32. 此处不能是这样 
  33.  
  34. void InitStack(LiStack *lst) 
  35. { 
  36. if(lst == NULL) 
  37. {    
  38. lst = (LiStack *)malloc(sizeof(LiStack)); 
  39. lst->next = NULL;    
  40. }    
  41. } 
  42. 如果是这样的话不能操作 使 lst实现以上的赋值 
  43. */ 
  44.  
  45. int StackEmpty(LiStack *lst) 
  46. return lst->next == NULL ? 1 : 0; 
  47.  
  48. int Push(LiStack *lst, ElemType e) 
  49. LiStack *temp = NULL; 
  50. if(lst == NULL) 
  51. lst = (LiStack *)malloc(sizeof(LiStack)); 
  52. lst->next = NULL; 
  53. temp = (LiStack *)malloc(sizeof(LiStack)); 
  54. temp->next = NULL; 
  55. temp->data = e; 
  56. lst->next = temp;    
  57. return 1; 
  58. }else  
  59. temp = (LiStack *)malloc(sizeof(LiStack)); 
  60. temp->next = NULL; 
  61. temp->data = e; 
  62. temp->next = lst->next; 
  63. lst->next = temp; 
  64. return 1; 
  65. return 0; 
  66.  
  67. int Pop(LiStack *lst, ElemType *e) 
  68. LiStack *temp = NULL;    
  69. if(lst == NULL || lst->next == NULL) return 0; 
  70. else  
  71. temp = lst->next ; 
  72. *e = temp->data; 
  73. lst->next = temp->next ; 
  74. free(temp); 
  75. return 1; 
  76.  
  77. int judge(char a[], int n) 
  78. int i; LiStack *ls = NULL; char ch;  
  79. ls = InitStack(ls); 
  80. for(i=0; i<n; i++) 
  81. if(a[i] == 'i'
  82. Push(ls,a[i]); 
  83. else if(a[i] == 'o'
  84. Pop(ls,&ch); 
  85. else return 0; 
  86. return StackEmpty(ls); 
  87.  
  88. void main() 
  89. char a[8] = {'i','o','o','i','o','i','i','o'};   
  90. printf("%d \n",judge(a,8));