C++程序 使用栈翻转字符串
给定一个字符串,使用栈翻转它。例如,“GeeksQuiz”应该转换为“ziuQskeeG”。
以下是使用栈翻转字符串的简单算法。
1)创建一个空栈。
2)逐个将字符串的所有字符推至栈中。
3)逐个从栈中弹出所有字符并将它们放回字符串中。
试试吧!
以下程序实现了上述算法。
//C++程序翻转字符串
//使用堆栈
#include
using namespace std;
//表示栈的结构
class Stack
{
public:
int top;
unsigned capacity;
char* array;
};
//创建一个给定容量的栈函数。初始化栈大小为0
Stack* createStack(unsigned capacity)
{
Stack* stack = new Stack();
stack->capacity = capacity;
stack->top = -1;
stack->array = new char[(stack->capacity *
sizeof(char))];
return stack;
}
//当栈满时,顶部等于最后一个索引
int isFull(Stack* stack)
{ return stack->top == stack->capacity - 1; }
//当栈为空时,顶部等于-1
int isEmpty(Stack* stack)
{ return stack->top == -1; }
//向栈中添加项的函数。将top增加1
void push(Stack* stack, char item)
{
if (isFull(stack))
return;
stack->array[++stack->top] = item;
}
//从堆栈中删除一个项的函数。将top减少1
char pop(Stack* stack)
{
if (isEmpty(stack))
return -1;
return stack->array[stack->top--];
}
//使用堆栈的函数翻转字符串
void reverse(char str[])
{
//创建一个容量与字符串长度相等的栈
int n = strlen(str);
Stack* stack = createStack(n);
//将字符串的所有字符推入堆栈
int i;
for (i = 0; i < n; i++)
push(stack, str[i]);
//弹出字符串的所有字符并将它们放回str中
for (i = 0; i < n; i++)
str[i] = pop(stack);
}
//驱动程序
int main()
{
char str[] = "GeeksQuiz";
reverse(str);
cout << "翻转后的字符串是" <<
str;
return 0;
}
输出:
翻转后的字符串是ziuQskeeG
时间复杂度: O(n),其中n是堆栈中的字符数。
辅助空间: 堆栈的占用空间为O(n)。