这节我学习的是栈。
栈的特点与队列的一个特点相反:栈是后进先出。
- 后进先出。
- 只能在一端进行插入和删除操作
- 实现栈很简单,仅需要一个一位数组和指向栈顶的变量top就可以了。
什么是栈顶呢?
想象一个盒装的乐事薯片,装薯片的时候,最后一个进去的是不是要被我们第一个吃掉呢。(没有透明的抽屉!)栈顶就是我们吃的第一个薯片!
栈的作用:一个非常简单地操作,判断一串字符是否是回文字符串。
判断的原理:如果一个字符串是回文的,它必须有中间点,并且是对称的。将中间点之前的字符入队,再和中间点之后的字符一一比较,如果相同即为回文字符串
下面我们用代码来实现:
#include <stdio.h>
#include <string.h>
int main()
{
char a[101], s[101];
int i, len, mid, next, top;
printf("请输入字符串:");
gets(a);//读入一行字符串
len = strlen(a);//求字符串的长度
mid = len / 2 - 1;//求字符串的早点,为什么减一?数组是从0开始的!
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\n");
else
printf("NO\n");
return 0;
}
结果: