帮我编写一个可以运行的有中文操作选择的包含循环函数的并且可以实现以下功能的一个C语言程序:1.能 利用“数组”作为存储结构方法实现“堆栈”的基本操作,包括:创建堆栈、入栈、出栈、空栈、满栈等操作。 2.能 利用堆栈完成,将一组输入的数据逆序输出。依次入栈的数据如下:a b c d e f,依次出栈的数据如下:f e d c b a 3.能 利用“数组”作为存储结构方法实现“队列”的基本操作,包括:创建队列、入队列、出队列、队列满、队列空等基本操作。 4. 能利用“堆栈”和“队列”,对输入的一组“字符串”判断是否“回文”
时间: 2023-06-27 10:04:57 浏览: 88
以下是您需要的程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
// 堆栈结构体定义
typedef struct {
char data[MAXSIZE];
int top;
} Stack;
// 队列结构体定义
typedef struct {
char data[MAXSIZE];
int front;
int rear;
} Queue;
// 创建堆栈
Stack *createStack() {
Stack *s = (Stack *)malloc(sizeof(Stack));
s->top = -1;
return s;
}
// 判断堆栈是否为空
int isEmptyStack(Stack *s) {
return s->top == -1;
}
// 判断堆栈是否已满
int isFullStack(Stack *s) {
return s->top == MAXSIZE - 1;
}
// 入栈
void push(Stack *s, char c) {
if (isFullStack(s)) {
printf("Stack is full\n");
return;
}
s->data[++(s->top)] = c;
}
// 出栈
char pop(Stack *s) {
if (isEmptyStack(s)) {
printf("Stack is empty\n");
return '\0';
}
return s->data[(s->top)--];
}
// 创建队列
Queue *createQueue() {
Queue *q = (Queue *)malloc(sizeof(Queue));
q->front = q->rear = 0;
return q;
}
// 判断队列是否为空
int isEmptyQueue(Queue *q) {
return q->front == q->rear;
}
// 判断队列是否已满
int isFullQueue(Queue *q) {
return (q->rear + 1) % MAXSIZE == q->front;
}
// 入队列
void enqueue(Queue *q, char c) {
if (isFullQueue(q)) {
printf("Queue is full\n");
return;
}
q->data[q->rear] = c;
q->rear = (q->rear + 1) % MAXSIZE;
}
// 出队列
char dequeue(Queue *q) {
if (isEmptyQueue(q)) {
printf("Queue is empty\n");
return '\0';
}
char c = q->data[q->front];
q->front = (q->front + 1) % MAXSIZE;
return c;
}
// 将一组输入的数据逆序输出
void reverseInput() {
Stack *s = createStack();
char c;
printf("Please input a sequence of characters: ");
while ((c = getchar()) != '\n') {
push(s, c);
}
printf("Reverse sequence: ");
while (!isEmptyStack(s)) {
putchar(pop(s));
}
putchar('\n');
}
// 判断字符串是否回文
int isPalindrome(char *str) {
int len = strlen(str);
Stack *s = createStack();
Queue *q = createQueue();
int i;
for (i = 0; i < len; i++) {
push(s, str[i]);
enqueue(q, str[i]);
}
while (!isEmptyStack(s)) {
if (pop(s) != dequeue(q)) {
return 0;
}
}
return 1;
}
int main() {
int choice;
do {
printf("Please select the operation:\n");
printf("1. Reverse input sequence\n");
printf("2. Judge whether the string is palindrome\n");
printf("0. Exit\n");
scanf("%d", &choice);
getchar();
switch (choice) {
case 1:
reverseInput();
break;
case 2: {
char str[MAXSIZE];
printf("Please input a string: ");
fgets(str, MAXSIZE, stdin);
if (isPalindrome(str)) {
printf("The string is palindrome\n");
} else {
printf("The string is not palindrome\n");
}
break;
}
case 0:
printf("Exit\n");
break;
default:
printf("Invalid choice\n");
break;
}
} while (choice != 0);
return 0;
}
```
程序分为四部分:
1. 堆栈的基本操作:创建堆栈、判断堆栈是否为空、判断堆栈是否已满、入栈、出栈。
2. 队列的基本操作:创建队列、判断队列是否为空、判断队列是否已满、入队列、出队列。
3. 将一组输入的数据逆序输出。
4. 判断字符串是否回文。
在主函数中,根据用户的选择进行相应的操作,直到用户选择退出。
阅读全文