其他分享
首页 > 其他分享> > No2.解密回文-栈

No2.解密回文-栈

作者:互联网

一、回文判断,用上节中的struct queue更方便一点,本节用stack作为入点

栈stack的一个难点是:指针top指向的是栈顶元素,还是空闲位置?

  比如书中写法:top=0; top++; s[top] = x;  -> 初始化起点为0,第一个写入元素位置为top=1;  -> 这里top指针指向的是栈顶元素;所以最后判断语句是 top == 0!

  我的写法,top=0;s[top] = x;top++;  -> 初始化起点为0,第一个写入元素位置为top=0;  -> 这里top指针指向的是栈顶的空闲位置;所以,在判断a[i]!=s[top] 之前,必须执行top = top-1; 使得指针指向栈中的元素;最后成立的条件是top==-1;

二、两种写法都记录,以便加深理解

EG1. 

int stack(){
  char a[100],s[100];
  int i,mid,len,next,top;

  gets(a);
  len=strlen(a);
  mid=len/2-1;
  top=0;

  if(len%2 == 0)
    next = mid +1;
  else
    next = mid + 2;
  for (i=0;i<=mid;i++){
    s[top] = a[i];
    top++;
  }


  top = top-1;
  for (i=next;i<len;i++){
    if (a[i]!=s[top])
      break;
    else
      top--;
  }
  if (top == -1)
    printf("YES");
  else
    printf("NO");
  return 0;
}

EG2.

int main()
{
  char a[101],s[101];
  int i,len,mid,next,top;
  gets(a); //读入一行字符串
  len=strlen(a); //求字符串的长度
  mid=len/2-1; //求字符串的中点
  top=0;//栈的初始化
  //将mid前的字符依次入栈
  for(i=0;i<=mid;i++)
    s[++top]=a[i];
  //判断字符串的长度是奇数还是偶数,并找出需要进行字符匹配的起始下标
  if(len%2==0)
    next=mid+1;
  else
    next=mid+2;
  //开始匹配
  for(i=next;i<=len-1;i++)

  {
    if(a[i]!=s[top])
      break;
    top--;
  }
  //如果top的值为0,则说明栈内所有的字符都被一一匹配了
  if(top==0)
    printf("YES");
  else
    printf("NO");

  return 0;
}

标签:++,top,mid,len,next,解密,else,No2,回文
来源: https://www.cnblogs.com/yalimy/p/14981672.html