帮我编写可以运行的有中文操作指引的包含循环函数并且具有以下功能的一个C语言程序:1.能 利用“数组”作为存储结构方法实现“堆栈”的基本操作,包括:创建堆栈、入栈、出栈、空栈、满栈等操作。 2.能 利用堆栈完成,将一组输入的数据逆序输出。依次入栈的数据如下:a b c d e f,依次出栈的数据如下:f e d c b a 3.能 利用“数组”作为存储结构方法实现“队列”的基本操作,包括:创建队列、入队列、出队列、队列满、队列空等基本操作。 4. 能利用“堆栈”和“队列”,对输入的一组“字符串”判断是否“回文”
时间: 2023-06-27 15:05:03 浏览: 55
以下是一个包含中文操作指引的C语言程序,实现了以上所述的四种功能:
```c
#include <stdio.h>
#include <stdbool.h>
// 定义堆栈和队列的最大容量
#define MAX_SIZE 10
// 堆栈结构体
typedef struct {
int top; // 栈顶指针
char data[MAX_SIZE]; // 存储数据的数组
} Stack;
// 队列结构体
typedef struct {
int front, rear; // 队头和队尾指针
char data[MAX_SIZE]; // 存储数据的数组
} Queue;
// 创建堆栈
void createStack(Stack *s) {
s->top = -1; // 初始化栈顶指针为-1
}
// 判断堆栈是否为空
bool isEmptyStack(Stack s) {
return s.top == -1;
}
// 判断堆栈是否已满
bool isFullStack(Stack s) {
return s.top == MAX_SIZE - 1;
}
// 入栈
void push(Stack *s, char c) {
if (isFullStack(*s)) {
printf("堆栈已满,无法入栈!\n");
return;
}
s->data[++s->top] = c;
}
// 出栈
char pop(Stack *s) {
if (isEmptyStack(*s)) {
printf("堆栈已空,无法出栈!\n");
return '\0';
}
return s->data[s->top--];
}
// 创建队列
void createQueue(Queue *q) {
q->front = q->rear = 0; // 初始化队头和队尾指针为0
}
// 判断队列是否为空
bool isEmptyQueue(Queue q) {
return q.front == q.rear;
}
// 判断队列是否已满
bool isFullQueue(Queue q) {
return (q.rear + 1) % MAX_SIZE == q.front;
}
// 入队列
void enqueue(Queue *q, char c) {
if (isFullQueue(*q)) {
printf("队列已满,无法入队!\n");
return;
}
q->data[q->rear] = c;
q->rear = (q->rear + 1) % MAX_SIZE;
}
// 出队列
char dequeue(Queue *q) {
if (isEmptyQueue(*q)) {
printf("队列已空,无法出队!\n");
return '\0';
}
char c = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return c;
}
// 将一组输入的数据逆序输出
void reverseInput() {
Stack s;
createStack(&s);
printf("请输入一组数据(以空格分隔):\n");
char c;
while ((c = getchar()) != '\n') {
if (c != ' ') {
push(&s, c);
}
}
printf("逆序输出的数据为:");
while (!isEmptyStack(s)) {
printf("%c ", pop(&s));
}
printf("\n");
}
// 判断字符串是否为回文
bool isPalindrome(char *str) {
Stack s;
Queue q;
createStack(&s);
createQueue(&q);
int i = 0;
while (str[i] != '\0') {
enqueue(&q, str[i]);
push(&s, str[i]);
i++;
}
while (!isEmptyStack(s)) {
if (pop(&s) != dequeue(&q)) {
return false;
}
}
return true;
}
int main() {
int choice;
do {
printf("请选择功能:\n");
printf("1. 将一组输入的数据逆序输出\n");
printf("2. 判断字符串是否为回文\n");
printf("0. 退出程序\n");
scanf("%d", &choice);
getchar(); // 清空输入缓冲区
switch (choice) {
case 1:
reverseInput();
break;
case 2:
printf("请输入一个字符串:\n");
char str[MAX_SIZE];
gets(str);
if (isPalindrome(str)) {
printf("%s 是回文!\n", str);
} else {
printf("%s 不是回文!\n", str);
}
break;
case 0:
break;
default:
printf("输入有误,请重新选择!\n");
break;
}
} while (choice != 0);
return 0;
}
```
运行程序后,根据提示选择相应的功能即可进行操作。例如,选择第一项将会提示您输入一组数据,然后将它们逆序输出;选择第二项将会提示您输入一个字符串,然后判断它是否为回文。在输入字符串时,请确保不要超过定义的最大容量。