栈,递归
- 栈的基本操作
注意:是从后往前连接的
1 #include <stdio.h> 2 #include <Windows.h> 3 typedef struct sStack 4 { 5 int num; 6 struct sStack* pnext; 7 }Stack; 8 void push(Stack **pStack,int num); 9 int pop(Stack **pStack); 10 BOOL isEmpty(Stack *pStack); 11 12 int main() 13 { 14 Stack* pStack = NULL; 15 push(&pStack,1); 16 push(&pStack,2); 17 push(&pStack,3); 18 printf("%d\n",pop(&pStack)); 19 printf("%d\n",pop(&pStack)); 20 printf("%d\n",pop(&pStack)); 21 printf("%d\n",pop(&pStack)); 22 if( isEmpty(pStack)) 23 printf("栈为空\n"); 24 return 0; 25 } 26 void push(Stack **pStack,int num) 27 { 28 Stack* stack = (Stack*)malloc(sizeof(Stack)); 29 stack->num = num; 30 stack->pnext = NULL; 31 32 stack->pnext = *pStack; 33 *pStack = stack; 34 //不需要判断栈是否为空,直接push就好 35 } 36 int pop(Stack **pStack) 37 { 38 int a = 0; 39 Stack* temp; 40 if(isEmpty( *pStack)) 41 return -1; 42 a = (*pStack)->num; 43 temp = *pStack; 44 (*pStack) = (*pStack)->pnext; 45 free(temp);//弹出之后要删除 46 return a; 47 } 48 BOOL isEmpty(Stack *pStack) 49 { 50 if(pStack == NULL) 51 return TRUE; 52 else 53 return FALSE; 54 }基本操作
- 递归
1 #include <stdio.h> 2 int JIECHENG(int); 3 void Out(int,int ); 4 int main() 5 { 6 printf("%d\n",JIECHENG(5)); 7 Out(1,4); 8 return 0; 9 } 10 int JIECHENG(int num) 11 { 12 if(num == 1) 13 { 14 return 1; 15 } 16 else return num*JIECHENG(num-1); 17 } 18 void Out(int begin,int end) 19 { 20 if(begin <= end) 21 { 22 printf("%d\n",begin); 23 Out(begin+1,end); 24 printf("%d\n",begin); 25 } 26 }