每日收获
栈的回文
include<stdio.h>
define MAX 100
typedef struct{
char data[MAX];
int index;
}stack;
void initStack(stack *s){
s->index=-1;
}
int push(stack *s,char ch){
if(s->index==(MAX-1)){
printf("栈满");
return 0;
}
s->data[++(s->index)]=ch;
return 1;
}
int pop(stack *s,char *ch){
if(s->index==(-1)){
printf("栈空");
return 0;
}
*ch = s->data[(s->index)--];
return 1;
}
int main(){
stack s;
int length;
char ch[MAX];
initStack(&s);
scanf("%d",&length);
getchar();//吸收换行符
for(int i=0;i<length;i++){
scanf("%c",&ch[i]);
}
for(int i=0;i<length;i++){
if(ch[i]==' '){
printf("入栈不成功");
return 0;
}
}
int mid=length/2;
for(int i=0;i<mid;i++){
push(&s,ch[i]);
}
int flag=1;
char c;
int start=(length%2==0)?mid:mid+1;
for(int i=start;i<length;i++){
if(!(pop(&s,&c))||c!=ch[i]){
flag=0;
}
}
if(flag==1){
printf("此字符串是回文串");
}else{
printf("此字符串不是回文串");
}
return 0;
}
队列的回文
include<stdio.h>
include<string.h>
define MAX 100
typedef struct{
char data[MAX];
int front;
int rear;
}Queue;
void initQueue(Queue *q){
q->front=0;
q->rear=0;
}
int enqueue(Queue *q,char ch){
if((q->rear+1)%MAX==q->front){
printf("队满");
return 1;
}
q->data[q->rear]=ch;
q->rear=(q->rear+1)%MAX;
}
int deQueueFront(Queue *q,char *ch){
if(q->front==q->rear){
printf("队空");
return 0;
}
*ch=q->data[q->front];
q->front=(q->front+1)%MAX;
return 1;
}
int deQueueRear(Queue *q,char *ch){
if(q->front==q->rear){
printf("队空");
return 0;
}
q->rear=(q->rear-1)%MAX;
*ch=q->data[q->rear];
return 1;
}
int getSize(Queue *q){
return (q->rear-q->front+MAX)%MAX;
}
int main(){
char ch[MAX];
Queue q;
initQueue(&q);
//读入字符串
fgets(ch,MAX,stdin);
//去除字符串末尾换行符
ch[strcspn(ch,"\n")]='\0';
for(int i=0;i<strlen(ch);i++){
if(ch[i]!=' '){
enqueue(&q,ch[i]);
}
}
int flag=1;
char front,rear;
while(getSize(&q)>1){
deQueueFront(&q,&front);
deQueueRear(&q,&rear);
if(front!=rear){
flag=0;
break;
}
}
if(flag){
printf("该字符串是回文字符串");
}else{
printf("该字符串不是回文字符串");
}
return 0;
}
浙公网安备 33010602011771号