C课设判断回文报告Word下载.docx
《C课设判断回文报告Word下载.docx》由会员分享,可在线阅读,更多相关《C课设判断回文报告Word下载.docx(15页珍藏版)》请在冰点文库上搜索。
![C课设判断回文报告Word下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/11/88f4fc7b-b112-4323-aef6-d45c3f19fb35/88f4fc7b-b112-4323-aef6-d45c3f19fb351.gif)
stinit(s)构造一个空栈,完成对栈的初始化s
quinit(q)构造一个空队列,完成对队列的初始化q
stpush(s,c)完成字符进栈的操作
enqueue(q,c)完成字符进队列的操作
stempty(s),quempty(q)判断栈和队列中是否还有元素
stpop(s),dequeue(q)比较出栈与出队列的字符是否匹配
⒉判断字符
基本操作:
stpop(s)==dequeue(q);
初始条件:
在子函数中已经定义了栈与队列,而且已经将字符分别输入空的栈和队列中,现在的关键就在于判断从栈和队列里出来的元素是否相同。
操作结果:
如果输入到栈和队列元素相同,那么代表输入的字符为回文字符。
3.本程序模块结构
⑴主函数模块
voidmain(){
初始化;
为栈和队列申请空间;
调用栈和队列功能子函数;
判断从栈和队列出来的字符是否相同;
得出最终的结果;
⑵栈模块----实现栈抽象数据类型,完成对栈的初始化,进栈和出栈的操作。
⑶队列模块----实现队列抽象数据类型,完成对队列的初始化,进队列和出队列的操作。
各模块之间的调用关系如下:
主程序模块
栈模块
队列模块
三、详细设计
1基本数据类型操作
1栈模块
1typedefstruct
{
charstack[m];
inttop;
}stackstru;
//定义栈
2参数设置:
#definem100
//----------基本操作的算法描述--------------------
intstinit(stackstru*s)
s->
top=-1;
return1;
}//初始化栈
intstempty(stackstru*s)
if(s->
top==-1)//栈顶为空
return0;
else
}//判断栈是否为空
intstpush(stackstru*s,charx)
top==m)//栈满
{
puts("
Thestackisoverflow!
"
);
//输出提示信息
}
else//栈未满
top=s->
top+1;
/栈顶后移
stack[s->
top]=x;
//字符入栈
}//入栈操作
charstpop(stackstru*s)
chary;
top==-1)//栈为空
Thestackisempty!
return'
'
;
//返回空格
else//栈不为空
y=s->
top];
//取出栈顶元素
top-1;
//栈顶指示后移
returny;
}//出栈操作
2队列模块:
charqueue[m];
intfront;
intrear;
}queuestru;
//定义队列
intquinit(queuestru*q)
q->
front=0;
rear=0;
}//初始化一个空的循环队列
intquempty(queuestru*q)
if(q->
front==q->
rear)//队头和队尾相等
return0;
}//判断队列是否为空
intenqueue(queuestru*q,chare)
if((q->
rear+1)%m==q->
front)//队列已满
Thequeueisoverflow!
//提示信息
queue[q->
rear]=e;
//入队
rear=(q->
rear+1)%m;
//移动队尾指针
}//入队操作
chardequeue(queuestru*q)
charf;
rear)//队列为空
Thequeueisempty!
f=q->
front];
//取出队首元素
front=(q->
front+1)%m;
//移动对头指针
returnf;
}//出队操作
3主函数算法:
voidmain()
charc;
intflag=0;
stackstru*s=(stackstru*)malloc(sizeof(stackstru));
queuestru*q=(queuestru*)malloc(sizeof(queuestru));
stinit(s);
quinit(q);
----------huiwenjiance----------"
--102023ban10202331huangyawei--"
putchar('
\n'
Welcometocomehere,pleaseinputastring:
while((c=getchar())!
='
)//输入字符串。
输入回车键结束
putchar(c);
//输出输入的字符
stpush(s,c);
//字符进栈
enqueue(q,c);
//字符进队列
Pleasepress'
enter'
tocontinue!
//提示信息
getchar();
while(stempty(s))//栈中还有元素
if(stpop(s)==dequeue(q))//出战的字符与出队列的字符匹配
{flag=1;
continue;
}//将标志设置为1,继续从栈和队列中区配字符
else//字符不匹配
{flag=0;
break;
}//跳出循环,将标志设置为0
if(flag==1)
puts("
Thisstringispalindrome(weihui)!
//标志为1,完全匹配,是回文
Thisstringisn'
tpalindrome(huiwen)!
//标志为0,不完全匹配,不是回文
getchar();
Ceshiisover,plesaepress'
toexit!
\n"
}
2函数的调用关系反映了本演示程序的层次结构
main
栈设置队列设置
stinitstemptystpushstpopdequeueenqueuequemptyquinit
判断是否相等
四、调试分析
⒈在写整个程序的时候应注意对已栈和队列的操作不能少了一个步骤,否则会出现一些关于栈和队列的常识错误,从而会影响整个程序。
⒉在程序中加了一些栈和队列基本的函数,比如判断栈和队列是否为空及栈和队列是否已满的函数,这样可以使程序更加完善。
⒊在主函数中使用一些实用的提示符及界面的一些提示,这样使使用者更好的使用。
五、用户手册
⒈本程序的运行环境是在tc2.0中,文件名为huiwen.c。
⒉打开文件后,按下Ctrl+F9进入界面。
⒊进入界面后,按照界面的提示输入一串字符。
⒋输入结束后,按Enter键结束输入。
⒌然后继续按Enter键查看结果,看输入的字符是否为回文。
⒍最后再次按Enter键退出判断程序。
六、测试数据
进入界面后出现下面界面
然后输入你想要输入的字符,假如输入abcdcba这一串字符,连续按两下Enter键结果:
然后再次按下Enter键后:
再次按下Enter键就结束了本次测试,再次测试下另一串字符,如:
abcdefg
通过上面两次的测试,分别对字符abcdcba和abcdefg进行测试,结果已经表明字符abcdcba为回文,而字符abcdefg不是回文,满足实际要求。
七、附录
源程序:
#include<
stdio.h>
stdlib.h>
typedefstruct
top==-1)
top==m)
rear)
front)
voidmain()
)
while(stempty(s))
if(stpop(s)==dequeue(q))