栈和队列实现字符串逆序输出以及判断是否回文

别的专业的朋友让我帮忙写的一个很简单的小作业……运行效果图#include<iostream>#include<cstdlib>#include<cstdio>#define ERROR '#'using namespace std;typedef struct SNode{ //栈结构定义 char *Data; //存储元素的数组 int Top; //栈顶指针,即栈顶元素在数组中的下标 int MaxSize; //
摘要由CSDN通过智能技术生成

别的专业的朋友让我帮忙写的一个很简单的小作业……

运行效果图

#include<iostream>
#include<cstdlib>
#include<cstdio>
#define ERROR '#'
using namespace std;

typedef struct SNode{  //栈结构定义 
	char *Data;  //存储元素的数组 
	int Top;  //栈顶指针,即栈顶元素在数组中的下标 
	int MaxSize;  //栈最大容量 
}*Stack;
typedef struct QNode{  //循环队列结构定义 
	char *Data;  //存储元素的数组 
	int Front,Rear;  //队列的头尾指针 
	int MaxSize; //队列最大容量 
}*Queue;

Stack CreateStack(int MaxSize);  //创建空栈 
int IsFull(Stack S);  //判断栈是否为空,空返回1,非空返回0 
int IsEmpty(Stack S); //判断栈是否满,满返回1,非满返回0 
int Push(Stack S,char X);//入栈操作,成功返回1,失败(栈满)返回0 
char Pop(Stack S); //出栈操作,成功返回弹出的元素,失败返回E
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是您需要的C语言程序,包含堆队列、for循环函数和汉语操作引导。请注意,程序中的注释可以帮助您更好地理解代码的功能和操作过程。 ```c #include <stdio.h> #include <stdbool.h> // 引入 bool 类型 #define MAX_SIZE 10 // 堆栈和队列的最大容量 // 堆结构体定义 struct stack { int top; // 顶元素下标 int data[MAX_SIZE]; // 存储数据的数组 }; // 队列结构体定义 struct queue { int front, rear; // 队首和队尾指针 int data[MAX_SIZE]; // 存储数据的数组 }; // 创建堆 void createStack(struct stack *s) { s->top = -1; // 初始化顶指针 } // 判断堆是否为空 bool isStackEmpty(struct stack *s) { return (s->top == -1); // 如果顶指针为 -1,说明为空 } // 判断堆是否已满 bool isStackFull(struct stack *s) { return (s->top == MAX_SIZE-1); // 如果顶指针为 MAX_SIZE-1,说明已满 } // 入 void push(struct stack *s, int item) { if (isStackFull(s)) { // 判断是否已满 printf("堆已满,无法入!\n"); return; } s->top++; // 顶指针加 1 s->data[s->top] = item; // 将数据存入顶位置 } // 出 int pop(struct stack *s) { if (isStackEmpty(s)) { // 判断是否为空 printf("堆为空,无法出!\n"); return -1; } int item = s->data[s->top]; // 取出顶元素 s->top--; // 顶指针减 1 return item; } // 创建队列 void createQueue(struct queue *q) { q->front = q->rear = -1; // 初始化队首和队尾指针 } // 判断队列是否为空 bool isQueueEmpty(struct queue *q) { return (q->front == -1 && q->rear == -1); // 如果队首和队尾指针都为 -1,说明队列为空 } // 判断队列是否已满 bool isQueueFull(struct queue *q) { return ((q->rear+1)%MAX_SIZE == q->front); // 如果队列尾部下一个位置等于队首位置,说明队列已满 } // 入队列 void enqueue(struct queue *q, int item) { if (isQueueFull(q)) { // 判断队列是否已满 printf("队列已满,无法入队列!\n"); return; } if (isQueueEmpty(q)) { // 如果队列为空,需要同时移动队首和队尾指针 q->front = q->rear = 0; } else { // 否则只需要移动队尾指针 q->rear = (q->rear+1) % MAX_SIZE; } q->data[q->rear] = item; // 将数据存入队尾位置 } // 出队列 int dequeue(struct queue *q) { if (isQueueEmpty(q)) { // 判断队列是否为空 printf("队列为空,无法出队列!\n"); return -1; } int item = q->data[q->front]; // 取出队首元素 if (q->front == q->rear) { // 如果队列只有一个元素,需要同时重置队首和队尾指针 q->front = q->rear = -1; } else { // 否则只需要移动队首指针 q->front = (q->front+1) % MAX_SIZE; } return item; } // 判断字符串是否回文 bool isPalindrome(char *str) { struct stack s; struct queue q; createStack(&s); // 创建堆 createQueue(&q); // 创建队列 // 将字符串中的字符依次入和入队列 for (int i = 0; str[i] != '\0'; i++) { push(&s, str[i]); enqueue(&q, str[i]); } // 依次出和出队列,比较字符是否相同 while (!isStackEmpty(&s) && !isQueueEmpty(&q)) { if (pop(&s) != dequeue(&q)) { // 如果字符不相同,说明不是回文 return false; } } return true; // 如果全部字符都相同,说明是回文 } int main() { char str[MAX_SIZE]; printf("请输入一个字符串:"); scanf("%s", str); // 输入字符串 if (isPalindrome(str)) { // 判断字符串是否回文 printf("输入的字符串回文!\n"); } else { printf("输入的字符串不是回文!\n"); } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值