为什么要用循环压栈代替递归?
因为递归容易出现栈溢出,所谓的循环压栈也可以说是循环压堆。堆区就很大了。
#ifndef STACK_H
#define STACK_H
typedef struct _Node
{
char data;
struct _Node* next;
}Node;
typedef struct _Stack
{
Node* top;
}Stack;
void initStack(Stack* s);
int isStackEmpty(Stack* s);
void push(Stack* s,char ch);
char pop(Stack* s);
void clearStack(Stack* s);
void resetStack(Stack* s);
#endif // STACK_H
#include"Stack.h"
#include"stdlib.h"
#include<stdio.h>
void initStack(Stack* s)
{
s->top = (Node*)malloc(sizeof(Node));
s->top->next = NULL;
}
int isStackEmpty(Stack* s)
{
return s->top->next ==NULL;
}
void push(Stack* s,char ch)
{
Node* cur = (Node*)malloc(sizeof(Node));
cur->data = ch;
cur->next = s->top->next;
s->top->next = cur;
}
char pop(Stack* s)
{
Node* t = s->top->next;
char ch = t->data;
s->top->next = t->next;
free(t);
return ch;
}
void clearStack(Stack* s)
{
resetStack(s);
free(s->top);
}
void resetStack(Stack* s)
{
while (!isStackEmpty(s))
{
pop(s);
}
}
int main()
{
Stack s;
initStack(&s);
for(char ch = 'A';ch <= 'M';ch++)
{
push(&s,ch);
}
while (!isStackEmpty(&s))
{
printf("%c ",pop(&s));
}
return 0;
}