数据结构栈的应用

本文详细介绍了使用C++实现十进制转其他进制的非递归算法,以及解决括号匹配问题的代码实现,并提供了一个检查字符串是否为回文的简单方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

应用一:

十进制转为其他进制的非递归实现                                                         

#include<iostream>
#include "d://SeqStack.cpp"
using namespace std;
void f(int num,int radix)
{
    int m;
    SeqStack stack;
    stack.initStack();
  while(num/radix!=0)
  {
      m=num%radix;
      stack.Push(m);//入栈
      num=num/radix;
  }
  m=num%radix;
stack.Push(m);
stack.visit();
}
int main()
{
    int num,radix;
cout<<"请输入一个十进制数字:";
cin>>num;
cout<<endl<<"请输入要转换的进制树:";
cin>>radix;
cout<<endl<<num<<"转换为"<<radix<<"进制数为";
f(num,radix);
return 0;
}

应用二:

括号的匹配问题

#include<iostream>
using namespace std;
#include"链栈.cpp"
int match(char exp[],int n)
{
  int i=0;
  int mat=1;
  linkStack *stack=initStack();
  while(i<n&&mat)
  {
    switch (exp[i])
    {
      case '(':
      case '[':
      case '{':
      case '<':
         {
          stack=push(stack,exp[i]);
          cout<<"入栈:"<<exp[i]<<endl;
          i++;
         }
         break;
      case ')':
          {
           if(!isEmpty(stack)&&getTop(stack)=='(')
           {
            cout<<"出栈:";
            stack=pop(stack);
            i++;
           }
           else mat=0;
          }
          break;
      case ']':
          {
           if(!isEmpty(stack)&&getTop(stack)=='[')
           {
            stack=pop(stack);
            i++;
           }
           else mat=0;
          }
           break;
      case '}':
          {
           if(!isEmpty(stack)&&getTop(stack)=='{')
           {
            stack=pop(stack);
            i++;
           }
           else mat=0;
          }
          break;
      case '>':
          {
           if(!isEmpty(stack)&&getTop(stack)=='<')
           {
            stack=pop(stack);
            i++;
           }
           else mat=0;
          }
           break;
      default:break;
        
    }
  }
return mat;
}
int  main()
{
    char exp[]={'[','(','}'};
    cout<<match(exp,2);
return 0;
}

应用三:

检查一个字符串是否是回文
#include<iostream>
using namespace std;
void sympthy(char str[])
{
 int i,j,n; 
 n=strlen(str);
 char temp[50];
 //将字符数组的前一半入栈
 for(j=0;j<n/2;j++)
 {
  temp[j]=str[j];
 }
 
 //如果字符数组的长度是偶数
 if(n%2==0)i=j;
 else i=j+1;j=j-1;
 //前一半和后一半比较
 while(i<n&&str[i]==temp[j])
 {
  i++;
  j--;
 }
 if(i==n)
   cout<<"是回文!!!";
 else
	 cout<<"不是回文!!!";
 

}
int main()
{
	char str[]="qwertyuytrewq";
	sympthy(str);
 return 0;
}

第二个程序(匹配括号问题上)有点错误,各位路过的帮忙找找错啊!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值