LinkStack by c

 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 }

posted on 2012-09-04 00:40  robin.he  阅读(139)  评论(0)    收藏  举报

导航