薄荷萤火虫 2022-02-26 14:39 采纳率: 91.8%
浏览 47
已结题

C语言想要实现只有字母入栈和入队列,进而判断回文

代码如下(头文件就不放出来了)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Palindrome1.h"

/*初始化带头结点的链式栈*/
void StackInitiate(SingleLinkedNode **head)
{
    if((*head=(SingleLinkedNode *)malloc(sizeof(SingleLinkedNode)))==NULL)
        exit(1);
    (*head)->next=NULL; 
}
/*入栈*/
int StackPush(SingleLinkedNode *head,ElemType x)
{
    SingleLinkedNode *p;
    if((p=(SingleLinkedNode *)malloc(sizeof(SingleLinkedNode)))==NULL)
    {
        printf("内存空间不足无法插入!\n");
        return 0;
    }
    p->data=x;
    p->next=head->next;//将p插入到头结点后面 
    head->next=p;//新结点成为新的栈顶
    return 1; 
}
/*出栈,后进先出*/
int StackPop(SingleLinkedNode *head,ElemType *d)
{
    SingleLinkedNode *p=head->next;
    if(p==NULL)
    {
        //printf("堆栈已空出错!");
        return 0;
    }
    head->next=p->next;//删除原栈顶结点 
    *d=p->data;//原栈顶结点元素赋为d 
    free(p);
    return 1;
}

/*初始化队列Q*/
void QueueInitiate(SequenceQueue *Q)
{
    Q->front=0;//定义初始队头指针为0
    Q->count=0;//初始计数器为0 
}
/*入队列,在队列Q的队尾插入数据元素x*/
int QueueAppend(SequenceQueue *Q,ElemType x)
{
    if(Q->count>=MaxQueueSize)
    {
        //printf("队列已满无法插入!\n");
        return 0;
    }
    else
    {
        Q->queue[(Q->front+Q->count)%MaxQueueSize]=x;//通过MaxQueueSize防止假溢出且实现循环 
        Q->count++;
        return 1; 
    }
}
/*出队列,把队列Q的队头元素删除并由参数d带回*/
int QueueDelete(SequenceQueue *Q,ElemType *d)
{
    if(Q->count==0)
    {
        printf("循环队列已空,无数据元素出队列!\n");
        return 0;
    }
    else
    {
        *d=Q->queue[Q->front];
        Q->front=(Q->front+1)%MaxQueueSize;
        Q->count--;
        return 1;
    }
}

。。。。。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Palindrome1.h"


int main()
{
    
    SingleLinkedNode *s;
    SequenceQueue d;
    StackInitiate(&s);//初始化栈 
    QueueInitiate(&d);//给队列初始化
    char c[N];
    scanf("%s",c);//将输入的字符串交到数组
    int i;
    for(i=0;c[i];i++)//将数组中的每个字符取出并把每个字符进队列和进栈
    {
        if(c[i]>='a'&&c[i]<='z')
        {
            StackPush(s,c[i]);//进栈
            QueueAppend(&d,c[i]);//进队列
        }
    }
    char a;
    char f=NULL;
    while(StackPop(s,&a)&&QueueDelete(&d,&f))//实现了出队列的顺序和出栈的顺序是否一样
    {
       if(a!=f)//判断出循环的原因 如果是因为每个字符都比较完出的循环并且最后一个字符也都一样那么就是回文
           break;
    }
    if(a==f)
    {
        printf("是回文!");
    }
    else
    {
        printf("不是回文!");
    }
    
    printf("\n");
    return 0;
}

img

我加了个逗号,它就判断不是回文了,可是我不是已经只是让字母入栈和队列了吗?

  • 写回答

1条回答 默认 最新

  • 开发者小峰 2022-02-26 15:32
    关注

    你用scanf输入的,空格把字符串隔开了,这里判断的是madmi

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月6日
  • 已采纳回答 2月26日
  • 创建了问题 2月26日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度