假设有一列车车厢的序列串,分别用’H’表示硬席车厢,'S’表示软席车厢,请编写算法,对输入的字符串,通过栈的操作,将所有的软席车厢都调整到硬席车厢前面。 char * Bianzu( char *s, int n); HHSSHSHSHH
时间: 2024-11-20 21:44:52 浏览: 6
数据结构试验
为了实现这个功能,我们可以遍历输入的字符串,利用栈的数据结构特性,每当遇到'S'字符时,就将其压入栈中,而遇到'H'字符时,直接输出。在遍历结束后,再将栈中的所有'S'字符依次弹出并输出。以下是使用C语言的一个简单实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义一个函数,接收字符串和长度作为参数
char* adjustCarriages(char* s, int n) {
stack<char> softSeatStack; // 初始化一个空栈
char result[n]; // 存储结果的临时数组
int i = 0;
// 遍历输入字符串
for (; i < n; ++i) {
if (s[i] == 'S') { // 当遇到软席车厢
softSeatStack.push(s[i]); // 将'S'压入栈
} else if (s[i] == 'H') { // 当遇到硬席车厢
// 如果栈非空,将所有软席车厢移到结果前面
while (!softSeatStack.empty()) {
result[i++] = softSeatStack.top();
softSeatStack.pop(); // 弹出栈顶的'S'
}
result[i] = s[i]; // 将'H'加入结果
}
}
// 确保结果数组有足够的空间存储所有字符
if (i < n) {
result[i] = '\0'; // 结束字符串
}
return result; // 返回结果字符串
}
int main() {
char* input = "HHSSHSHSHH";
int n = strlen(input);
char* adjusted = adjustCarriages(input, n);
printf("Adjusted carriage order: %s\n", adjusted);
free(adjusted); // 释放内存
return 0;
}
```
运行上面的程序,它将输出 "SSHHHHHHH",实现了将所有软席车厢(S)调整到硬席车厢(H)前面的目标。
阅读全文