SquenceStack by c

 1 #pragma once
 2 
 3 typedef char SSElemType;
 4 typedef enum {false, true} bool;
 5 
 6 typedef struct {
 7     int sp;
 8     int size;
 9     SSElemType *data;
10 } SStack, *SStackPtr;
11 
12 bool CreateSStack(SStackPtr p, int len);
13 bool Push(SStackPtr p, SSElemType d);
14 bool Pop(SStackPtr p, SSElemType *d);
15 void DestroySStack(SStackPtr p);
 1 bool CreateSStack(SStackPtr p, int len)
 2 {
 3     p->data = (SSElemType *)malloc(sizeof(SSElemType) * len);
 4     if (NULL == p->data)
 5     return false;
 6 
 7     p->size = len;
 8     p->sp = 0;
 9 
10     return true;
11 }
12 
13 void DestroySStack(SStackPtr p)
14 {
15     free(p->data);
16     p->size = 0;
17 }
18 
19 static bool IsEmpty(SStackPtr p)
20 {
21     return p->sp == 0;
22 }
23 
24 static bool IsFull(SStackPtr p)
25 {
26     return p->sp == p->size;
27 }
28 
29 bool Push(SStackPtr p, SSElemType d)
30 {
31     if (IsFull(p))
32     return false;
33 
34     p->data[p->sp] = d;
35     p->sp++;
36 
37     return true;
38 }
39 
40 bool Pop(SStackPtr p, SSElemType *d)
41 {
42     if (IsEmpty(p))
43     return false;
44 
45     p->sp--;
46     *d = p->data[p->sp];
47 
48     return true;
49 }
 1 #include <stdio.h>
 2 #include "SquenceStack.h"
 3 
 4 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
 5 
 6 void ReverseWord(SSElemType *str, int size)  //反转单词,将hello world 转为world hello
 7 {
 8     int i;
 9     SSElemType d;
10     SStack stk1, stk2;
11 
12     CreateSStack(&stk1, size + 1);
13     CreateSStack(&stk2, size + 1);
14 
15     Push(&stk1, ' ');
16 
17     for (i = 0; i < size; i++)
18       Push(&stk1, str[i]);
19 
20     while (Pop(&stk1, &d)) {
21     if (d == ' ') {
22         while (Pop(&stk2, &d))
23         printf("%c", d);
24         putchar(' ');
25     } else
26         Push(&stk2, d);
27     }
28 
29     putchar('\n');
30 
31     DestroySStack(&stk1);
32     DestroySStack(&stk2);
33 }
34 
35 int main(int argc, char **argv)
36 {
37     SSElemType str[] = {'h', 'e' , 'l' , 'l', 'o', ' ', 'w','o' ,'r' ,'l' ,'d'};
38 
39     ReverseWord(str, ARRAY_SIZE(str));
40 
41     return 0;
42 }

posted on 2012-09-03 17:57  robin.he  阅读(165)  评论(0)    收藏  举报

导航