中心对称字符串问题Word格式文档下载.docx
- 文档编号:20175810
- 上传时间:2023-01-17
- 格式:DOCX
- 页数:16
- 大小:103.80KB
中心对称字符串问题Word格式文档下载.docx
《中心对称字符串问题Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《中心对称字符串问题Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
系统编程中使用的工具主要有PC机上的编程工具,业务系统是基于Windows7上开发的,开发工具选择的是MicrosoftVisualStudioSP6。
2、程序的用户界面
命令行界面
按照一定规律输入字符串,然后开始检验字符串
3、输入方式
字符数
输入字符串
4、输出方式
输出判定结果
字符串中心对称
字符串中心不对称
5、数据存储方式
全部在内存存放,不使用硬盘上的文件或其他数据源,程序执行过程中和结束后不保存数据。
6、程序功能
判定是否为对称字符串
二、概要设计
单链表数据结构:
用链表存储字符串,将链表前半部分倒置与后半部分比较。
单链表和栈数据结构:
用单链表存储字符串,将字符串前半部分进栈、出栈行成新的链表和原来有链表比较。
三、抽象数据定义
单链表数据结构
typedefstructlinknode{
chardata;
structlinknode*next;
}point;
创建链表,将链表前半部分倒置
在前半部分行程的新链表和后半部分链表逐个比较元素比较
单链表和栈
数据抽象
typedefstructnode
{
structnode*next;
}LinkList;
typedefstruct
{
char*base;
//栈顶指针(始终指向栈顶元素的下一个位置)
char*top;
//栈底指针(始终指向栈底)
}stack;
LinkList*
create(char
s[])
构造单链表
void
InitStack(stack
&
s)
构造空栈
push(stack
s,char
e)
进栈,将字符串前半部分进栈
char
pop(stack
出栈,弹出字符进行比较
int
judge(LinkList
*head)
判断单链表是否对称
四、详细设计
A)单链表数据结构
流程图
主要功能模块
抽象数据定义指针
输入字符数、字符串
inti,n=0;
point*f,*p,*q,*h,*s;
cout<
<
"
Inputthenumberofcharacterstring:
"
;
cin>
>
n;
endl<
Inputthecharacterstring:
p=(point*)malloc(sizeof(point));
q=p;
前半部分字符串倒置
for(i=1;
i<
=n-1;
i++){
q->
next=(point*)malloc(sizeof(point));
q=q->
next;
}
q->
data;
q->
next=NULL;
f=p;
p=NULL;
i=0;
s=f;
while(i<
(n/2)){
q=s;
s=s->
next=p;
p=q;
i++;
字符串为奇数,忽略中间数
if(n%2==1)
p=p->
else
h=p;
逐个比较元素值
while((p!
=NULL)&
(q!
(p->
data==q->
data))
p=p->
得到判断结果
if((p==NULL)&
(q==NULL))
cout<
中心对称!
else
中心不对称!
}
A)调试测试
B)栈的数据结构
主要功能设计
定义单链表的结点类型
typedefstructnode
根据输入的字符(存储在字数组中)建立一个不带结点的单链表
LinkList*create(chars[])
LinkList*head,
*newNode,//newNode
*tail;
//tail
for(inti=0;
s[i]!
='
\0'
i++)
newNode=(LinkList*)malloc(sizeof(LinkList));
//新开一个结点
newNode->
data=s[i];
newNode->
if(i==0)//如果只输入了一个字符
{
head=newNode;
tail=head;
}
tail->
next=newNode;
//把新开的结点连接到链表的最后一个结点上
tail=newNode;
returnhead;
定义栈的存储类型
voidInitStack(stack&
s)//栈的初始化
s.base=(char*)malloc(max*sizeof(char));
s.top=s.base;
voidpush(stack&
s,chare)//进栈函数
*s.top++=e;
charpop(stack&
s,char&
e)//出栈函数
e=*--s.top;
returne;
}
判断以单链表存储的字符串是否对称的函数
intjudge(LinkList*head)
stacks;
chare;
InitStack(s);
//定义一个栈并初始化
LinkList*p=head;
//把头指针赋给p,即让p指向第一个结点
while(p!
=NULL)
push(s,p->
data);
p=p->
p=head;
while(p!
=NULL)//将栈中的元素弹出,逐个与链表中的元素比较(可以看成是把链表换个方向,然后与原来的链表比较)
switch(judge(create(str)))//根据输入的字符串(存储在字符数组中)建立单链表然后进行判断
B)调试测试
五、总结:
更深沉次的了解数据结构,是一次比较好的集中训练。
但是写代码之前先做好分析准备能够提高写代码的效率,写代码时回头看分析也能找出分析的不足。
主要收获:
(1)保持良好的学习心态,第一,要有自信,自强,积极主动学习.第二,克服畏难情绪,树立学好程序设计的信心
(2)要了解概念:
VB程序设计本身并不复杂,变量,函数,条件语句,循环语句等概念较多.要真正能进行程序设计,就要深入理解这些概念.应该重视概念的学习.
(3)自己动手编写程序,亲自动手进行程序设计是培养逻辑思维的好方法.因此我们得多动手编写程序,逐渐提高写程序的能力.自己动手,编写一些程序,才会有成就感,进而对课程产生兴趣,做起来才比较从容.等你在编写大量程序之后(4)上机调试程序应注意多问问同学,多问问老师、,把不懂的地方标出来。
(5)养成良好的编程习惯,第一,程序构思要有说明;
第二,学会如何调试程序;
第三,对运行结果要做正确与否的分析。
参考文献:
《数据结构》、《C语言程序设计》
代码如下:
单链表
#include<
iostream.h>
stdio.h>
stdlib.h>
malloc.h>
intmain()
{
//f为指向字符串单链表的头指针
(n/2)){//前半部分倒置
data))//逐个比较元素值
if((p==NULL)&
(q==NULL))//得到判断结果
单链表和栈数据结构
#include<
#include<
string.h>
#definemax100
//////////////////定义单链表的结点类型////////////////////
/////////////////根据输入的字符(存储在字数组中)建立一个不带结点的单链表/////////////
LinkList*create(chars[])//函数返回的类型为指针
LinkList*head,//头指针
*newNode,//newNode始终指向新开的结点
//tail始终指向链表中的最后一个结点
////////////////////定义栈的存储类型//////////////////////////
///////////////判断以单链表存储的字符串是否对称的函数////////////////
if(p->
data==pop(s,e))
break;
//如果不相等,说明不是对称,调处循环
}
if(p==NULL)return1;
elsereturn0;
voidmain()
charstr[max];
//定义一个字符数组,用来存储输入的字符
LinkList*h;
while
(1)
printf("
\n\n请输入字符串(输入cls清屏,exit退出):
);
gets(str);
if(strcmp(str,"
exit"
)==0)break;
cls"
)==0)system("
case1:
\n%s是中心对称的的字符串\n"
str);
case0:
\n%s不是关于中心对称的\n"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中心对称 字符串 问题