用C语言数据结构做字符串的逆序输出
时间: 2024-05-14 09:16:39 浏览: 19
好的,以下是使用 C 语言数据结构做字符串逆序输出的代码:
```
#include <stdio.h>
#include <string.h>
int main()
{
char str[100];
printf("请输入字符串:");
scanf("%s", str);
// 使用栈来逆序输出字符串
int len = strlen(str);
char stack[len];
for(int i = 0; i < len; i++) {
stack[i] = str[i];
}
printf("逆序输出字符串:");
for(int i = len - 1; i >= 0; i--) {
printf("%c", stack[i]);
}
return 0;
}
```
这段代码首先通过 `scanf` 函数获取用户输入的字符串,接着用一个栈来将字符串逆序存储,最后再从栈中依次取出字符来逆序输出。
相关问题
用C语言数据结构实现字符串逆序输出 例abcde输出为edcba
可以使用栈这种数据结构来实现字符串的逆序输出。
具体实现步骤如下:
1. 定义一个栈,用于存储字符串中的每个字符。
2. 遍历字符串中的每个字符,将其依次压入栈中。
3. 遍历完字符串后,依次从栈中弹出字符,并打印出来,即可实现字符串的逆序输出。
以下是C语言代码实现:
```
#include<stdio.h>
#define MAX_SIZE 100
//定义栈结构体
typedef struct Stack{
char data[MAX_SIZE];
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 == MAX_SIZE - 1;
}
//压入栈顶
void Push(Stack *S, char ch){
if(IsFull(S)){
printf("栈已满,无法插入!");
}else{
S->data[++S->top] = ch;
}
}
//弹出栈顶
char Pop(Stack *S){
if(IsEmpty(S)){
printf("栈已空,无法弹出!");
return '\0';
}else{
return S->data[S->top--];
}
}
//字符串逆序输出函数
void Reverse(char *str){
Stack S;
Init(&S);
int i;
for(i=0; str[i]!='\0'; i++){
Push(&S, str[i]);
}
for(i=0; !IsEmpty(&S); i++){
str[i] = Pop(&S);
}
str[i] = '\0';
}
//测试 main 函数
int main(){
char str[MAX_SIZE];
printf("请输入一个字符串:");
scanf("%s", str);
Reverse(str);
printf("逆序输出结果为:%s", str);
return 0;
}
```
数据结构C语言回文判断
在C语言中,回文判断是一个常见的问题。回文是指正序和逆序读都相同的字符串或序列。下面是一种基于数据结构的回文判断方法:
1. 使用栈:将字符串中的字符依次入栈,然后再依次出栈与原字符串进行比较。如果出栈的字符与原字符串中的字符相同,则继续比较下一个字符;如果不相同,则说明不是回文。如果所有字符都比较完且相同,则是回文。
C语言代码示例:
```c
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100
// 栈结构定义
typedef struct {
char data[MAX_SIZE];
int top;
} Stack;
// 初始化栈
void initStack(Stack *s) {
s->top = -1;
}
// 入栈
void push(Stack *s, char c) {
s->data[++(s->top)] = c;
}
// 出栈
char pop(Stack *s) {
return s->data[(s->top)--];
}
// 判断是否为回文
int isPalindrome(char *str) {
int len = strlen(str);
Stack s;
initStack(&s);
// 将字符串前一半字符入栈
for (int i = 0; i < len / 2; i++) {
push(&s, str[i]);
}
// 比较栈中的字符与字符串后一半字符
int i = (len + 1) / 2;
while (i < len) {
if (pop(&s) != str[i]) {
return 0; // 不是回文
i++;
}
return 1; // 是回文
}
int main() {
char str[MAX_SIZE];
printf("请输入一个:");
scanf("%s", str);
if (isPalindrome(str)) {
printf("%s 是回文\n", str);
} else {
printf("%s 不是回文\n", str);
}
return 0;
}
```
--相关--:
1. 什么是回文?
2. 如何使用栈判断回文?
3. 还有其他的回文判断方法吗?