1.数组&栈
数组是一种常见的数据结构,而栈(Stack)则是一种具有特定操作顺序的数据结构。在栈中,元素的添加和删除操作都遵循“后进先出”(LIFO,Last In First Out)的原则。使用数组实现栈时,通常会维护一个栈顶指针,用于指示栈顶元素的位置。
2.使用数组实现栈的方面
- 初始化栈:
- 创建一个空数组作为栈的存储空间。
- 设定一个变量(通常是整数类型)作为栈顶指针,初始值设为-1或0,表示栈为空。
- 判断栈是否为空:
- 通过检查栈顶指针的值来判断栈是否为空。如果栈顶指针等于-1(或0,取决于具体实现),则栈为空。
- 入栈(Push)操作:
- 当有新元素需要加入栈时,执行入栈操作。
- 首先检查栈是否已满(即数组是否还有空余位置)。
- 如果栈未满,将新元素添加到数组的下一个位置,并将栈顶指针加1。
- 出栈(Pop)操作:
- 当需要从栈中移除元素时,执行出栈操作。
- 首先检查栈是否为空。
- 如果栈不为空,获取栈顶元素的值,并将其从数组中移除,然后将栈顶指针减1。
- 查看栈顶元素(Peek):
- 当需要查看栈顶元素但不移除它时,执行查看栈顶元素操作。
- 检查栈是否为空。
- 如果栈不为空,返回数组中栈顶指针指向的元素值,但不移动栈顶指针。
- 获取栈的大小(Size):
- 返回栈中元素的数量。这通常是通过栈顶指针的值加1来得到的(因为栈顶指针指向的是下一个要插入的位置)。
- 清空栈(Clear):
- 将栈顶指针重置为初始值(如-1或0),表示栈为空。数组中的元素不会被清除,但栈不再包含任何元素。
- 遍历栈(Traversal):
- 通过循环,从数组的开始位置遍历到栈顶指针指向的位置,可以访问和打印出栈中的所有元素。
3.数组实现栈并判断回文字符串的代码实现
#include<iostream>
#include<string.h>
#define MAX 100
using namespace std;
int main(){
char a[MAX+1],s[MAX+1];
cin>>a;
int len=strlen(a);
int mid=len/2-1;//数组中的字符串中点
//栈初始化
int top=0;
for(int i=0;i<=mid;i++)s[++top]=a[i];//++top,完成后top始终等于栈中元素个数
//奇偶分类比较起始
int b;
if(len%2==0)b=mid+1;//奇偶判断
else b=mid+2;
//匹配
for (int i = b; i <= len-1; i++)
{
if (a[i]!=s[top])break;
top--;
}
if (top==0)cout<<"no";
else cout<<"yes";
return 0;
}
4.注意事项
1.注意数组下标从【0】开始。
所以注意mid的+1关系:mid=len/2-1,if(len%2==0)b=mid+1; else b=mid+2;