C语言:如何利用数组stack实现字符串的反转
如何编写程序?
【以下回答由 GPT 生成】
#include <stdio.h>
#include <string.h>
// 定义栈结构
typedef struct {
char data[100];
int top;
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return s->top == -1;
}
// 判断栈是否满
int isFull(Stack *s) {
return s->top == 99;
}
// 入栈
void push(Stack *s, char c) {
if (isFull(s)) {
return;
}
s->data[++s->top] = c;
}
// 出栈
char pop(Stack *s) {
if (isEmpty(s)) {
return '\0';
}
return s->data[s->top--];
}
// 字符串反转
void reverseString(char *str) {
int len = strlen(str);
Stack s;
init(&s);
// 将字符串中的字符依次入栈
for (int i = 0; i < len; i++) {
push(&s, str[i]);
}
// 将栈中的字符依次出栈并重新赋值给字符串
for (int i = 0; i < len; i++) {
str[i] = pop(&s);
}
}
int main() {
char str[] = "Hello World";
printf("Original String: %s\n", str);
reverseString(str);
printf("Reversed String: %s\n", str);
return 0;
}
请注意,上述代码中定义了一个栈结构,并实现了栈的初始化、判空、判满、入栈、出栈等基本操作。利用这些栈操作,我们可以将字符串中的每一个字符依次入栈,然后再依次出栈并重新赋值给字符串,即可实现字符串的反转。
【相关推荐】
#include <stdio.h>
char stack[100];
int top;
void push(char ch)
{
stack[top++] = ch;
}
char pop()
{
return stack[--top];
}
int main()
{
top = 0;
char s[100];
scanf("%s", s);
for (int i = 0;s[i]; i++)
{
push(s[i]);
}
int n = top;
for (int i = 0; i < n; i++)
{
printf("%c", pop());
}
return 0;
}