- #ifndef _LINKEDSTACK_H
- #define _LINKEDSTACK_H
- typedef char ElemType;
- typedef struct linknode
- {
- ElemType data;
- struct linknode *next;
- }LiStack;
- LiStack *InitStack(LiStack *lst);
- int StackEmpty(LiStack *lst);
- int Push(LiStack *lst, ElemType e);
- int Pop(LiStack *lst, ElemType *e);
- #endif
- #include <stdio.h>
- #include "stdlib.h"
- #include "LinkedStack.h"
- LiStack *InitStack(LiStack *lst)
- {
- if(lst == NULL)
- {
- lst = (LiStack *)malloc(sizeof(LiStack));
- lst->next = NULL;
- return lst;
- }else
- return lst;
- }
- /*
- 此处不能是这样
- void InitStack(LiStack *lst)
- {
- if(lst == NULL)
- {
- lst = (LiStack *)malloc(sizeof(LiStack));
- lst->next = NULL;
- }
- }
- 如果是这样的话不能操作 使 lst实现以上的赋值
- */
- int StackEmpty(LiStack *lst)
- {
- return lst->next == NULL ? 1 : 0;
- }
- int Push(LiStack *lst, ElemType e)
- {
- LiStack *temp = NULL;
- if(lst == NULL)
- {
- lst = (LiStack *)malloc(sizeof(LiStack));
- lst->next = NULL;
- temp = (LiStack *)malloc(sizeof(LiStack));
- temp->next = NULL;
- temp->data = e;
- lst->next = temp;
- return 1;
- }else
- {
- temp = (LiStack *)malloc(sizeof(LiStack));
- temp->next = NULL;
- temp->data = e;
- temp->next = lst->next;
- lst->next = temp;
- return 1;
- }
- return 0;
- }
- int Pop(LiStack *lst, ElemType *e)
- {
- LiStack *temp = NULL;
- if(lst == NULL || lst->next == NULL) return 0;
- else
- {
- temp = lst->next ;
- *e = temp->data;
- lst->next = temp->next ;
- free(temp);
- return 1;
- }
- }
- int judge(char a[], int n)
- {
- int i; LiStack *ls = NULL; char ch;
- ls = InitStack(ls);
- for(i=0; i<n; i++)
- {
- if(a[i] == 'i')
- Push(ls,a[i]);
- else if(a[i] == 'o')
- Pop(ls,&ch);
- else return 0;
- }
- return StackEmpty(ls);
- }
- void main()
- {
- char a[8] = {'i','o','o','i','o','i','i','o'};
- printf("%d \n",judge(a,8));
- }