回文判断的算法实验报告Word文档下载推荐.docx
《回文判断的算法实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《回文判断的算法实验报告Word文档下载推荐.docx(10页珍藏版)》请在冰豆网上搜索。
structQNode*next;
}LQNode,*PQNode;
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<
stdio.h>
stdlib.h>
string.h>
#defineSTACKSIZE100
/*顺序栈的定义*/
/*链队列的定义*/
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++;
item[s->
top]=data;
intPop(SqStack*s,char*data)/*出栈*/
if(s->
top==-1)
\n堆栈已空,不能完成出栈操作!
*data=s->
top];
top--;
intInitQueue(LinkQueue*q)/*初始化链队列*/
q->
front=q->
rear=(PQNode)malloc(sizeof(LQNode));
if(!
q->
front)
printf("
\n初始化队列失败!
return0;
front->
next=NULL;
intQueueEmpty(LinkQueueq)/*判断是否为空队列*/
if(q.front==q.rear)
\n队列为空!
return1;
intEnQueue(LinkQueue*q,charitem)/*入队*/
PQNodep;
p=(PQNode)malloc(sizeof(LQNode));
p)
\n内存分配失败"
p->
data=item;
rear->
next=p;
rear=p;
intDeQueue(LinkQueue*q,char*item)/*出队*/
if(q->
front==q->
rear)
\n队列已空,不能出队"
p=q->
next;
*item=p->
data;
next=p->
free(p);
rear==p)/*若删除的为最后一个结点,移动队尾指针*/
rear;
intTraverseQueue(LinkQueueq)/*遍历*/
PQNodepos;
if(q.front==q.rear)
pos=q.front->
\nHereisthestring:
while(pos!
=NULL)
%c"
pos->
data);
pos=pos->
\n"
intmain()
inti,len,count1=0;
charstr1[100],ch,ch1;
LinkQueuelq1,lq2;
SqStacksq;
请输入字符:
scanf("
%s"
&
str1);
len=strlen(str1);
InitQueue(&
lq1);
lq2);
InitStack(&
sq);
for(i=0;
i<
len;
i++)
EnQueue(&
lq1,str1[i]);
TraverseQueue(lq1);
DeQueue(&
lq1,&
ch);
Push(&
sq,ch);
lq1,ch);
Pop(&
sq,&
lq2,ch);
TraverseQueue(lq2);
lq2,&
ch1);
if(ch1!
=ch)count1++;
if(count1==0)
\n该字符串为回文"
else
\n该字符串不是回文"