概念
栈 里面的内容可以是任意数据类型
遵循先入后出、FILO (firts input last ouput)
只能访问最顶层的数据,进行“入栈”和“出栈”
栈操作: 入栈 出栈 判断栈是否为空
需要一个指针,一直指向栈顶
代码实现:
#include <stdio.h>
char stack[512]; //定义一个栈
int top = 0; //栈顶的位置
void push(char c);
char pop(void);
int is_empty(void);
int main(void)
{
char ss;
push('a');
push('b');
push('c');
while(!is_empty())
{
putchar(pop()); //输出c\n b\n a\n
printf("\n");
}
return 0;
}
//入栈
void push(char c)
{
stack[top++] = c;
}
//出栈
char pop (void)
{
return stack[--top];
}
//判断是否为空 空为1 非空0
int is_empty(void)
{
return top == 0;
}
栈的应用
1.逆波兰表示法:
12+ 34- *
中缀表示:(1+2)*(3-4) 处理步骤:
1入栈;
2入栈;
+连续两次出栈 相加结果入栈;
3入栈;
4入栈;
-连续两次出栈 相减结果入栈;
*连续两次出栈 相乘结果入栈 就是最终结果了(完美)
5*(((9+8)*(4*6))+7)人脑可以处理这样的括号,从而判断数据,但电脑就难了
所以用逆波兰表示法,
5(((9+8)*(4*6))+7)*
5((9+8)*(4*6))7+*
5(9+8)(4*6)*7+*
598+46**7+*
处理步骤:
5入栈;9入栈;8入栈;+连续两次出栈8 9 相加结果17入栈;
4入栈;6入栈;*连续两次出栈4 6 相乘24结果入栈;
*连续两次出栈17 24 相乘结果408入栈;
7入栈;+连续两次出栈408 7 相加结果415入栈;
*连续两次出栈5 415 相乘结果2075入栈 就是最终结果了;
代码实现:
#include <stdio.h>
#include <string.h>
int stack[512]; //定义一个栈
int top = 0; //栈顶的位置
void push(int c);
int pop(void);
int is_empty(void);
int main(void)
{
char a[100];
int n,i,n1,n2;