数据结构。栈+队列判断字符序列是否属于回文数字或回文字符,非常详细

精髓,请仔细体会

bool test(SqQueue &Q,Stack &s){
	char c;
	while((c=getchar())!='@'){	//因为栈是先进后出 
		push_Stack(s,c);		//队列是先进先出 
		en_Queue(Q,c);			//所以可以把二者的出元素过程看做回文 
	}
	printf("\n");
	while(Q.front != Q.rear){
		if(pop_Stack(s) != de_Queue(Q))//一旦有一个不相等,就说明不是回文 
			return false;
	}
	return true;
}
#include<iostream>
#include<stdio.h>
#define MAXSIZE 50
using namespace std;
typedef struct{
	char data[MAXSIZE];
	int front,rear;
}SqQueue;
typedef struct{
	char data[MAXSIZE];
	int top;
}Stack;
void init_Queue(SqQueue &Q){
	Q.front = Q.rear = 0;
}
void init_Stack(Stack &S){
	S.top = -1;
} 
bool en_Queue(SqQueue &Q,char b){
	if((Q.rear+1)%MAXSIZE == Q.front){
		printf("队列满");
		return false; 
	}
	
	Q.data[Q.rear] = b;          
	printf("入队元素:%c  ",b);    		
	Q.rear = (Q.rear+1)%MAXSIZE;
			
	return true;
}
bool push_Stack(Stack &S,char a){

	S.data[++S.top] = a;
	printf("入栈元素:%c  ",a);
	return true;
}
char de_Queue(SqQueue &Q){
	char t;
	if(Q.front == Q.rear){
		printf("队列空");
		return false; 
	}
	t = Q.data[Q.front];
	printf("出队元素:%c  ",t);   
	Q.front = (Q.front+1)%MAXSIZE;
	return t;
}
char pop_Stack(Stack &S){
	if(S.top == -1){
		return 0;
	}
	char t;
	t = S.data[S.top--];
	printf("出栈元素:%c  ",t); 
	return t;
}
bool test(SqQueue &Q,Stack &s){
	char c;
	while((c=getchar())!='@'){	//因为栈是先进后出 
		push_Stack(s,c);		//队列是先进先出 
		en_Queue(Q,c);			//所以可以把二者的出元素过程看做回文 
	}
	printf("\n");
	while(Q.front != Q.rear){
		if(pop_Stack(s) != de_Queue(Q))//一旦有一个不相等,就说明不是回文 
			return false;
	}
	return true;
}
int main(){
	SqQueue Q;
	Stack S;
	init_Queue(Q);
	init_Stack(S);
	cout<<test(Q,S);
	return 0;
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言可以利用栈和队列判断一个字符是否回文。具体实现方法如下: 1. 利用实现判断回文:将字符串的前一半字符依次入,然后依次将后一半字符中的字符进行比较,如果全部相同,则该字符串为回文。 2. 利用队列实现判断回文:将字符串的前一半字符依次入队列,然后依次将后一半字符队列中的字符进行比较,如果全部相同,则该字符串为回文。 下面是利用实现判断回文的C语言代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_SIZE 100 typedef struct { char data[MAX_SIZE]; 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 == MAX_SIZE - 1; } void push(Stack *s, char c) { if (isFull(s)) { printf("Stack is full.\n"); exit(1); } s->data[++s->top] = c; } char pop(Stack *s) { if (isEmpty(s)) { printf("Stack is empty.\n"); exit(1); } return s->data[s->top--]; } int isPalindrome(char *str) { int len = strlen(str); Stack s; initStack(&s); int i; for (i = 0; i < len / 2; i++) { push(&s, str[i]); } if (len % 2 != 0) { i++; } while (i < len) { if (pop(&s) != str[i]) { return 0; } i++; } return 1; } int main() { char str[MAX_SIZE]; printf("Please input a string: "); scanf("%s", str); if (isPalindrome(str)) { printf("%s is a palindrome.\n", str); } else { printf("%s is not a palindrome.\n", str); } return 0; } ``` 下面是利用队列实现判断回文的C语言代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_SIZE 100 typedef struct { char data[MAX_SIZE]; int front; int rear; } Queue; void initQueue(Queue *q) { q->front = q->rear = -1; } int isEmpty(Queue *q) { return q->front == -1; } int isFull(Queue *q) { return (q->rear + 1) % MAX_SIZE == q->front; } void enqueue(Queue *q, char c) { if (isFull(q)) { printf("Queue is full.\n"); exit(1); } if (isEmpty(q)) { q->front = q->rear = 0; } else { q->rear = (q->rear + 1) % MAX_SIZE; } q->data[q->rear] = c; } char dequeue(Queue *q) { if (isEmpty(q)) { printf("Queue is empty.\n"); exit(1); } char c = q->data[q->front]; if (q->front == q->rear) { q->front = q->rear = -1; } else { q->front = (q->front + 1) % MAX_SIZE; } return c; } int isPalindrome(char *str) { int len = strlen(str); Queue q; initQueue(&q); int i; for (i = 0; i < len / 2; i++) { enqueue(&q, str[i]); } if (len % 2 != 0) { i++; } while (i < len) { if (dequeue(&q) != str[i]) { return 0; } i++; } return 1; } int main() { char str[MAX_SIZE];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值