您的位置:首页 > 理论基础 > 数据结构算法

懒猫老师-数据结构-(1)用栈判断一个字符串是否为回文串

2020-07-19 22:19 92 查看

文章目录

本文提供测试数据哦~
运行时请将数据粘贴到输入框中。

题目要求

代码实现

#include <iostream>
#include <string>
using namespace std;

const int MAX_SIZE = 100;   // 定义栈的最大长度
const int STR_LENGTH = 256; // 定义字符串的最大长度

class Stack
{
private:
int size;   // 栈的实际大小
int top;    // 栈顶
char* data; // 指向数组的指针
public:

/* 无参构造函数 */
Stack()
{
size = MAX_SIZE;
top = -1;                  // 表示是空栈
data = new char[MAX_SIZE]; // (申请动态内存) 创建MAX_SIZE大小的字符数组, 将其地址赋给data变量
}

/* 有参构造函数 */
Stack(int size)
{
if (size < MAX_SIZE)
{
this->size = size;
top = -1;
data = new char[size]; // 根据指定的大小分配栈的内存空间
}
else
{
cout << "输入值过大, 栈的容量最大为: " << MAX_SIZE << endl;
this->size = MAX_SIZE;
top = -1;
data = new char[MAX_SIZE];
}
}

/* 析构函数 */
~Stack()
{
delete[] data; // 内存回收
}

/* 入栈 */
void push(char ch)
{
if (!isFull())
{
top++;
data[top] = ch;
}
else
{
cout << "栈满,入栈失败!" << endl;
}
}

/* 出栈并返回栈顶元素 */
char pop()
{
if (!isEmpty())
{
char ch = data[top];
top--;
return ch;
}
else
{
cout << "空栈,出栈失败!" << endl;
}
}

/* 获得栈项元素(不出栈) */
char getTop()
{
if (!isEmpty())
{
return data[top];
}
else
{
cout << "空栈, 获取栈顶元素失败" << endl;
}
}

/* 判断栈是否为空 */
bool isEmpty()
{
if (top == -1)
{
return true;
}
else
{
return false;
}
}

/* 判断栈是否已满 */
bool isFull()
{
if (top >= size - 1)
{
return true;
}
else
{
return false;
}
}

/* 将设置栈为空 */
void setNull()
{
top = -1;
}

/* 判断字符串是否是回文 */
bool isPalindrome(string str)
{
for (int i = 0; i < str.length() / 2; i++)
{
push(str[i]); // 前一半字符入栈
}
int a;
if (str.length() % 2 == 0)
{
a = str.length() / 2;     // 偶数从后一半字符开始比较
}
else
{
a = str.length() / 2 + 1; // 奇数时跳过最中间一个数进行比较
}
for (int i = a; i < str.length(); i++)
{
if (str[i] != pop())
{
return false;
}
}
return true;
}
};

int main()
{
Stack myStack;

string str;
cout << "请输入一行字符串" << endl;
getline(cin, str);

bool flag = myStack.isPalindrome(str);
if (flag)
{
cout << "您输入的字符串是回文串" << endl;
}
else
{
cout << "您输入的字符串不是回文串" << endl;
}

return 0;
}

/*测试数据:
abccba
ABCBA
123  AAx xAA  321
123  AAx  xAA  321
1233210
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐