分享

栈的应用例子

 changqiong0606 2012-07-20
//------------进制转换------------->
void Conversion(int N,int R)
//把十进制数N转换为R进制(R>=2)并输出
{
 Stack S;
 int x;
 char t;
 InitStack(&S);
 while(N>0)
 {
  x = N%R;
  if(x>9)
   switch(x%10)
   {
   case 0: t = 'A';break;
   case 1: t = 'B';break;
   case 2: t = 'C';break;
   case 3: t = 'D';break;
   case 4: t = 'E';break;
   case 5: t = 'F';break;
   }
  else
   t = x + '0';
  Push(&S,t);
  N = N/R;
 }
 while(!EmptyStack(&S))
 {
  Pop(&S,&t);
  printf("%c",t);
 }
 printf("\n");
}
void main()
{
 Conversion(100,2);
 Conversion(16,16);
}
//<------------进制转换-------------
//------------括号匹配问题------------->
void check(char *strings)
{
 Stack s;
 char x;
 int flag = 1;
 InitStack(&s);
 while(*strings!='\0' && *strings!='\n' && flag)
 {
  if(*strings == '(')
   Push(&s,*strings);//读入左括号,左括号入栈
  if(*strings ==')')
  {
   if(EmptyStack(&s))//栈为空,无左括号配对,出错
    flag = 0;
   else
    Pop(&s,&x);//有左括号配对,去左括号
  }
  strings++;
 }
 if(!EmptyStack(&s))//栈不为空,左括号数目多于右括号数目,出错
  flag = 0;
 if(flag == 1)
  printf("左括号和右括号匹配!\n");
 else
  printf("左括号和右括号不匹配!\n");
}
void main()
{
 char s[200];
 printf("输入包含左括号和右括号的字符串:\n");
 gets(s);
 check(s);
}
//<-----------括号匹配问题--------------

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多