数据结构----栈的顺序存储(顺序栈)
栈的特点:先进后出
栈的操作:
用数组进行存储
(1)初始化:
//栈
typedef struct {int *data;//指针模拟分配数组int top;//栈“顶”指针
}Stack;
//初始化
Stack InitStack(){Stack s;//给数组分配空间s.data = (int*)malloc(sizeof(int)*maxx);if(s.data == NULL){printf("内存申请失败\n");return s;}//top是指向下一个数据的空间s.top = 0;return s;
}
(2)入栈:
//入栈
void push(Stack *s,int k){if(s == NULL){printf("栈区内存申请失败\n");return ;}if(s->top == 0){printf("栈为空\n");return ;}s->data[s->top] = k;s->top++;}
(3)出栈:
//出栈
void pop(Stack *s){if(s == NULL){printf("栈区内存申请失败\n");return ;}if(s->top == 0){printf("栈为空\n");return;}s->top--;
}
(4)判满:
//判满
int isFull(Stack s){if(s.top == maxx){printf("栈已满\n");return -1;}return 1;}
(5)判空:
//判空
int isNull(Stack s){if(s.top == 0){printf("栈为空\n");return -1;}return 1;
}
上溢:数组满了,继续入栈,产生上溢
下溢:数组为空,继续出栈,产生下溢
考题测试:
问:有n个数,入栈的顺序固定好了,请问合法的出栈顺序有多少个?
公式:C(2n,n)/(n+1),这称为卡特兰数。注:C(2n,n)是从2n个数中取出n个数。