1 #pragma once
2
3 typedef char * LSElemType;
4 typedef enum {false, true} bool;
5
6 typedef struct LSNode{
7 LSElemType data;
8 struct LSNode *next;
9 } LSNode, *LSNodePtr;
10
11 typedef struct LStack{
12 LSNodePtr sp;
13 } LStack, *LStackPtr;
14
15 void InitStack(LStackPtr stk);
16 bool Push(LStackPtr stk, LSElemType d);
17 bool Pop(LStackPtr stk, LSElemType *d);
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include "LinkStack.h"
4
5 void InitStack(LStackPtr stk)
6 {
7 stk->sp = NULL;
8 }
9
10 static bool IsEmpty(LStackPtr stk)
11 {
12 return stk->sp == NULL;
13 }
14
15 bool Push(LStackPtr stk, LSElemType d)
16 {
17 LSNodePtr node;
18
19 node = (LSNodePtr)malloc(sizeof(*node));
20 if (NULL == node)
21 return false;
22
23 node->data = d;
24 node->next = stk->sp;
25 stk->sp = node;
26
27 return true;
28 }
29
30 bool Pop(LStackPtr stk, LSElemType *d)
31 {
32 LSNodePtr node;
33
34 if (IsEmpty(stk))
35 return false;
36
37 node = stk->sp;
38 stk->sp = node->next;
39 *d = node->data;
40 free(node);
41
42 return true;
43 }
1 #include <stdio.h>
2 #include "LinkStack.h"
3
4 #define ARRAY_SZIE(a) (sizeof(a) / sizeof((a)[0]))
5
6 void ReverseWord(LSElemType *str, int len)
7 {
8 int i;
9 LSElemType d;
10 LStack stk;
11
12 InitStack(&stk);
13
14 for (i = 0; i < len; i++)
15 Push(&stk, str[i]);
16
17 while (Pop(&stk, &d))
18 printf("%s", d);
19
20 putchar('\n');
21 }
22
23 int main(int argc, char **argv)
24 {
25 LSElemType str[] = {"hello", " ", "world"};
26
27 ReverseWord(str, ARRAY_SZIE(str));
28
29 return 0;
30 }