C++程序 使用栈翻转字符串

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)。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例