回文判断的算法实验报告.docx

上传人:b****1 文档编号:771937 上传时间:2022-10-12 格式:DOCX 页数:10 大小:44.43KB
下载 相关 举报
回文判断的算法实验报告.docx_第1页
第1页 / 共10页
回文判断的算法实验报告.docx_第2页
第2页 / 共10页
回文判断的算法实验报告.docx_第3页
第3页 / 共10页
回文判断的算法实验报告.docx_第4页
第4页 / 共10页
回文判断的算法实验报告.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

回文判断的算法实验报告.docx

《回文判断的算法实验报告.docx》由会员分享,可在线阅读,更多相关《回文判断的算法实验报告.docx(10页珍藏版)》请在冰豆网上搜索。

回文判断的算法实验报告.docx

回文判断的算法实验报告

实验题目

 

回文判断的算法

 

一、需求分析

1.程序的功能:

实现对字符序列是否是一个回文序列的判断

2.输入输出的要求:

从键盘读入一组字符序列,判断是否是回文,并将结果显示在屏幕上

3.测试数据:

回文字符序列输入:

非回文字符序列输入:

二、概要设计

1.本程序所用的抽象数据类型的定义:

typedefstruct{

charitem[STACKSIZE];

inttop;

}SqStack;

typedefstructQNode{

chardata;

structQNode*next;

}LQNode,*PQNode;

typedefstruct{

PQNodefront,rear;

}LinkQueue;

2.主程序的流程及各程序模块之间的层次关系。

(1)intInitStack(SqStack*S):

栈初始化模块,即初始化一个空栈,随后对该空栈进行数据的写入操作;

(2)intPush(SqStack*s,chardata):

入栈操作,即给空栈中写入数据,数据长度有宏定义给出;

(3)intPop(SqStack*s,char*data):

出栈操作,即将栈中的数据输出,由于栈的操作是先进后出,因此,出栈的数据是原先输入数据的逆序;

(4)intInitQueue(LinkQueue*q):

队列初始化,即初始化一个空队列,最后对该空队列进行数据的写入操作;

(5)intEnQueue(LinkQueue*q,charitem):

入队操作,即给空队列中写入数据,数据长度一样有宏定义给出;

(6)intDeQueue(LinkQueue*q,char*item):

出队操作,即将队列中的数据输出,由于队列的操作是先进先出,因此,出队的数据室原先输入数据的正序;

(7)intmain():

主函数,用于调用前面的模块,进行出队数据与出栈数据的比较,判断输入的序列是否是回文序列。

模块之间关系及其相互调用的图示:

三、详细设计

1.采用c语言定义相关的数据类型

整形,字符型,指针类型,聚合类型,自定义类型

2.写出各模块的伪码算法:

参照源程序

(1)intInitStack(SqStack*S)

(2)intPush(SqStack*s,chardata)

(3)intPop(SqStack*s,char*data)

(4)intInitQueue(LinkQueue*q)

(5)intEnQueue(LinkQueue*q,charitem)

(6)intDeQueue(LinkQueue*q,char*item)

四、调试分析

1.调试中遇到的问题及对问题的解决方法:

问题:

程序出现未知错误。

方法:

在感觉容易出错的地方或者是已经出错的地方前面打断点,进一步调试。

2.算法的时间复杂度和空间复杂度。

时间复杂度:

T(n)=O(n)

五、使用说明及测试结果

回文字符输入:

非回文字符输入:

六、源程序(带注释)

#include

#include

#include

#defineSTACKSIZE100

typedefstruct{

charitem[STACKSIZE];

inttop;

}SqStack;/*顺序栈的定义*/

typedefstructQNode{

chardata;

structQNode*next;

}LQNode,*PQNode;

typedefstruct{

PQNodefront,rear;

}LinkQueue;/*链队列的定义*/

intInitStack(SqStack*S);/*初始化顺序栈*/

intStackEmpty(SqStackS);/*判断是否为空栈*/

intPush(SqStack*s,chardata);/*入栈*/

intPop(SqStack*s,char*data);/*出栈*/

intInitQueue(LinkQueue*q);/*初始化链队列*/

intQueueEmpty(LinkQueueq);/*判断是否为空队列*/

intEnQueue(LinkQueue*q,charitem);/*入队*/

intDeQueue(LinkQueue*q,char*item);/*出队*/

intTraverseQueue(LinkQueueq);/*遍历*/

intInitStack(SqStack*S)/*初始化顺序栈*/

{

S->top=-1;

return1;

}

 

intStackEmpty(SqStackS)/*判断是否为空栈*/

{

if(S.top==-1)return1;

elsereturn0;

}

 

intPush(SqStack*s,chardata)/*入栈*/

{

if(s->top==STACKSIZE-1)

{

printf("\n栈已满,不能完成入栈操作!

");

return0;

}

s->top++;

s->item[s->top]=data;

return1;

}

intPop(SqStack*s,char*data)/*出栈*/

{

if(s->top==-1)

{

printf("\n堆栈已空,不能完成出栈操作!

");

return0;

}

*data=s->item[s->top];

s->top--;

return1;

}

 

intInitQueue(LinkQueue*q)/*初始化链队列*/

{

q->front=q->rear=(PQNode)malloc(sizeof(LQNode));

if(!

q->front)

{

printf("\n初始化队列失败!

");

return0;

}

q->front->next=NULL;

return1;

}

 

intQueueEmpty(LinkQueueq)/*判断是否为空队列*/

{

if(q.front==q.rear)

{

printf("\n队列为空!

");

return1;

}

elsereturn0;

}

 

intEnQueue(LinkQueue*q,charitem)/*入队*/

{

PQNodep;

p=(PQNode)malloc(sizeof(LQNode));

if(!

p)

{

printf("\n内存分配失败");

return0;

}

p->data=item;

p->next=NULL;

q->rear->next=p;

q->rear=p;

return1;

}

 

intDeQueue(LinkQueue*q,char*item)/*出队*/

{

PQNodep;

if(q->front==q->rear)

{

printf("\n队列已空,不能出队");

return0;

}

p=q->front->next;

*item=p->data;

q->front->next=p->next;

free(p);

if(q->rear==p)/*若删除的为最后一个结点,移动队尾指针*/

q->front=q->rear;

return1;

}

 

intTraverseQueue(LinkQueueq)/*遍历*/

{

PQNodepos;

if(q.front==q.rear)

{

printf("\n队列为空!

");

return0;

}

pos=q.front->next;

printf("\nHereisthestring:

");

while(pos!

=NULL)

{

printf("%c",pos->data);

pos=pos->next;

}

printf("\n");

return1;

}

intmain()

{

inti,len,count1=0;

charstr1[100],ch,ch1;

LinkQueuelq1,lq2;

SqStacksq;

printf("请输入字符:

");

scanf("%s",&str1);

len=strlen(str1);

InitQueue(&lq1);

InitQueue(&lq2);

InitStack(&sq);

for(i=0;i

{

EnQueue(&lq1,str1[i]);

}

TraverseQueue(lq1);

for(i=0;i

{

DeQueue(&lq1,&ch);

Push(&sq,ch);

EnQueue(&lq1,ch);

}

for(i=0;i

{

Pop(&sq,&ch);

EnQueue(&lq2,ch);

}

TraverseQueue(lq2);

for(i=0;i

{

DeQueue(&lq1,&ch);

DeQueue(&lq2,&ch1);

if(ch1!

=ch)count1++;

}

if(count1==0)

{

printf("\n该字符串为回文");

}

else

printf("\n该字符串不是回文");

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1