栈的经典使用:
1.进制转换
十进制向其他进制转换,涉及到一个基本算法,除模取余。及如下图所示:
假如从十进制n向八进制o转换:
n n(div)8 n(mod)8
964 120 4
120 15 0
15 8 7
1 0 1
即964(n)=1704(o)
简单算法如下:
//进制转换算法
void Conversion(int n, int d)
{
Stack_Node *s;
int k, *e;
s = Init_Stack();
while(n>0) {//循环取模
k = n%d;
push(s,k);//入栈
n = n/d;
}
while(s->top != NULL)
{
pop(s,*e);//出栈操作
printf("%1d",*e);
}
}2.括号匹配问题
括号的匹配算法也是栈结构的经典实用例子,基本思想就是设置一个栈,读取括号,如果是左括号,就进栈;如果是右括号就将栈顶的左括号出栈。直到读完所有括号,栈中的存储为空。那么括号就是严格匹配的。
具体算法如下:
//括号匹配问题
#define FALSE -1
#define TRUE 0
SqStack s;
s = Init_Stack();
int Match_Brackets()
{
char ch, sh;
scanf("%c",&ch);
while(int(ch)!=13) {
if(ch = '(' || ch = '[') {
push(s,ch);
} else if(ch = ')') {
x = pop(s);
if(x != '(') {
printf("不匹配!");
return FALSE;
}
} else if(ch = ']') {
x = pop(s);\
if(x!='[') {
printf("不匹配!");
return FALSE;
}
}
}
if(s.top != NULL) {
printf("不匹配!");
return FALSE;
}
return TRUE;
}3.栈的经典使用之递归算法
学程序的一定听过递归这种算法,核心思想就是利用栈的结构。层层解析入栈,然后层层运算出栈。
递归:一个函数直接或者间接调用自己本身。必须有递归规则,必须有退出条件。
例如求n的阶乘:
可以理解为从n到0一层层入栈,然后将计算后的值层层出栈。具体算法如下:
//n的阶乘
int Fact(int n)
{
if(n==0)
return n;
if(n>0)
return n*Fact(n-1);
}
本文介绍了栈在计算机科学中的三种经典应用:进制转换、括号匹配问题以及递归算法的实现。通过具体的算法示例,展示了栈如何高效地解决这些问题。

8075

被折叠的 条评论
为什么被折叠?



