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 }