帮我编写一个具有以下功能的C语言程序:1. 利用“数组”作为存储结构方法实现“堆栈”的基本操作,包括:创建堆栈、入栈、出栈、空栈、满栈等操作。 2. 利用堆栈完成,将一组输入的数据逆序输出。依次入栈的数据如下:a b c d e f,依次出栈的数据如下:f e d c b a 3. 利用“数组”作为存储结构方法实现“队列”的基本操作,包括:创建队列、入队列、出队列、队列满、队列空等基本操作。 4. 利用“堆栈”和“队列”,对输入的一组“字符串”判断是否“回文”
时间: 2023-06-27 13:05:36 浏览: 91
下面是代码实现:
1. 堆栈的实现
```c
#include <stdio.h>
#define MAXSIZE 100
// 定义堆栈结构体
typedef struct{
char data[MAXSIZE];
int top; // 标记栈顶元素位置
}Stack;
// 初始化堆栈
void InitStack(Stack *s){
s->top = -1;
}
// 判断是否为空栈
int IsEmpty(Stack s){
return s.top == -1;
}
// 判断是否为满栈
int IsFull(Stack s){
return s.top == MAXSIZE - 1;
}
// 入栈
void Push(Stack *s, char x){
if(IsFull(*s)){
printf("The stack is full!\n");
return;
}
s->data[++s->top] = x;
}
// 出栈
char Pop(Stack *s){
if(IsEmpty(*s)){
printf("The stack is empty!\n");
return '#';
}
return s->data[s->top--];
}
```
2. 使用堆栈将一组输入的数据逆序输出
```c
#include <stdio.h>
#include "stack.h"
int main(){
Stack s;
InitStack(&s);
printf("Please input a string:\n");
char c;
while((c = getchar()) != '\n'){
Push(&s, c);
}
printf("The reverse string is:\n");
while(!IsEmpty(s)){
printf("%c", Pop(&s));
}
return 0;
}
```
3. 队列的实现
```c
#include <stdio.h>
#define MAXSIZE 100
// 定义队列结构体
typedef struct{
char data[MAXSIZE];
int front, rear; // 标记队头和队尾元素位置
}Queue;
// 初始化队列
void InitQueue(Queue *q){
q->front = q->rear = 0;
}
// 判断队列是否为空
int IsEmpty(Queue q){
return q.front == q.rear;
}
// 判断队列是否为满
int IsFull(Queue q){
return (q.rear + 1) % MAXSIZE == q.front;
}
// 入队
void EnQueue(Queue *q, char x){
if(IsFull(*q)){
printf("The queue is full!\n");
return;
}
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAXSIZE;
}
// 出队
char DeQueue(Queue *q){
if(IsEmpty(*q)){
printf("The queue is empty!\n");
return '#';
}
char x = q->data[q->front];
q->front = (q->front + 1) % MAXSIZE;
return x;
}
```
4. 使用堆栈和队列判断输入的一组字符串是否回文
```c
#include <stdio.h>
#include <string.h>
#include "stack.h"
#include "queue.h"
int main(){
char s[100];
printf("Please input a string:\n");
scanf("%s", s);
int len = strlen(s);
Stack stack;
Queue queue;
InitStack(&stack);
InitQueue(&queue);
// 将字符串压入堆栈和队列中
for(int i = 0; i < len; i++){
Push(&stack, s[i]);
EnQueue(&queue, s[i]);
}
int flag = 1;
// 依次出栈和出队,判断是否相等
for(int i = 0; i < len; i++){
if(Pop(&stack) != DeQueue(&queue)){
flag = 0;
break;
}
}
if(flag){
printf("The string is palindrome!\n");
}
else{
printf("The string is not palindrome!\n");
}
return 0;
}
```
阅读全文