回文判断实验二
java实验报告回文数

else
{
System.out.printf("\t%d不是回文数", number);
}
}
else if (【代码6】) //判断number是4位数的条件
{
System.out.printf("\n%d是4位数",number);
If (【代码7】) //判断number是回文数的条件码
{
System.out.printf("\t%d是回文数", number);
32567位数32567不是回文数6实验总结及心得这次实验使我对java程序的编写有了更进一步的了解熟悉掌握了ifelseif多分支语句的运用
《Java程序设计》实验报告
实验二:回文数
专业班级:通信工程2008级1班
姓名:
学号:
时间:
实验二:回文数
1、实验目的:
让学生掌握if-else if多分支语ຫໍສະໝຸດ 。}else{
System.out.printf("\t%d不是回文数", number);
}
}
else if(d2!=0)
{
System.out.printf("\n%d是2位数", number);
if(d1==d2)
{
System.out.printf("\t%d是回文数", number);
}
if(number<=99999&&number>=1)
{
d5=number/10000;
d4=number%10000/1000;
d3=number%1000/100;
回文判断实验报告

回文判断实验报告一(实验题目:回文判断二(实验目的:对于一个从键盘输入的字符串,判断其是否为回文。
回文即正反序相同。
如“abba”是回文,而“abab”不是回文。
三(实验需求:1.数据从键盘读入;2.输出要判断的字符串;3.利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“Yes”否则输出“No”四(主要实现函数(1)建立顺序栈存储结构typedef struct { }(2)初始化int initstack(Sqstack &s,int maxsize)(3)入栈int enstack(Sqstack &s, char e) (4)出栈int popstack(Sqstack &s,char &e)(5)判断是否为回文int main(){int r; //用于判断是否为回文Sqstack L,Q; //定义两个栈initstack(L,20);initstack(Q,20);int l; //用于记录输入字符的长度 cout<<"请输入字符串长度"; cin>>l;if(l<=0)exit(1);cout<<"输入字符"<<endl;for(int i=1;i<=l;i++) //输入字符 {char p;cin>>p;enstack(L,p); //入栈 L }cout<<endl;for(int m=1;m<=l;m++){char f;f=getstack(L,m); //从栈 L中取元素,在入栈 Qenstack(Q,f);}for(int n=1;n<=l;n++){char a,b; //从栈 L Q 出栈,比较popstack(L,a);popstack(Q,b);if(a!=b)r=1;else r=2;}if(r==1)cout<<"no"<<endl<<endl;五(源程序#include <iostream> using namespace std; typedef char SElemType; typedef struct {SElemType *base;SElemType *top;int stacksize;}Sqstack;int initstack(Sqstack &s,int maxsize) /{s.base=new SElemType[maxsize]; if(!s.base)exit(1);s.top=s.base;s.stacksize=maxsize;return 0;}int enstack(Sqstack &s, char e){if(s.top-s.base==s.stacksize)exit(1); *s.top=e;s.top++;return 0;}int popstack(Sqstack &s,char &e){if(s.top==s.base)exit(1);e=*--s.top;return 0;}int getstack(Sqstack &s,int i) { SElemType *p;p=s.top;for(int j=1;j<=i;j++){p--;}return *p;}int main(){int r; Sqstack L,Q; initstack(L,20); initstack(Q,20);int l; cout<<"请输入字符串长度"; cin>>l;if(l<=0)exit(1);cout<<"输入字符"<<endl;for(int i=1;i<=l;i++) {char p;cin>>p;enstack(L,p); }cout<<endl;for(int m=1;m<=l;m++){char f;f=getstack(L,m);enstack(Q,f);}for(int n=1;n<=l;n++){char a,b;popstack(L,a);popstack(Q,b);if(a!=b)r=1;else r=2;}if(r==1)cout<<"no"<<endl<<endl; else if(r==2)cout<<"yes"<<endl<<endl; else cout<<"发生错误"<<endl;cout<<"继续判断输入Y,退出输入N"<<endl;char d;cin>>d;if(d=='y'||d=='Y')main();else return 0;}五(各功能的运行界面:(1)主界面:(2)输入1,2,3,4四个字符判断是否是回文,运行界面如下:(3)设置字符串长度为5,a,s,d,s,a,判断是否为回文,运行界面如下:。
数据结构回文实验报告

数据结构回文实验报告数据结构回文实验报告引言:数据结构是计算机科学中的重要概念,它研究如何组织和管理数据,以便高效地访问和操作。
回文是一种特殊的字符串,它正着读和倒着读都一样。
在本实验中,我们将探索使用不同的数据结构来判断一个字符串是否为回文。
实验目的:1. 了解回文的概念和特点;2. 掌握常见的数据结构,如数组、链表和栈;3. 实践使用不同数据结构来判断字符串是否为回文;4. 比较不同数据结构在回文判断中的性能差异。
实验过程:首先,我们需要定义一个字符串,并将其存储在不同的数据结构中。
我们选择了“level”这个回文字符串作为示例。
1. 数组:我们使用一个字符数组来存储字符串。
首先,我们需要计算字符串的长度,并将每个字符按顺序存储在数组中。
然后,我们使用两个指针,一个指向数组的开头,一个指向数组的末尾,逐个比较它们所指向的字符是否相同。
如果所有字符都相同,则该字符串是回文。
2. 链表:我们使用一个单向链表来存储字符串。
每个节点包含一个字符和一个指向下一个节点的指针。
我们将字符串的每个字符依次插入链表的末尾。
然后,我们使用两个指针,一个指向链表的开头,一个指向链表的末尾,逐个比较它们所指向的字符是否相同。
如果所有字符都相同,则该字符串是回文。
3. 栈:我们使用一个栈来存储字符串。
我们将字符串的每个字符依次入栈。
然后,我们使用两个指针,一个指向栈的顶部,一个指向栈的底部,逐个比较它们所指向的字符是否相同。
如果所有字符都相同,则该字符串是回文。
实验结果:我们对以上三种数据结构进行了回文判断实验,并记录了结果。
在本次实验中,我们发现使用数组和栈的方法可以正确判断字符串是否为回文,而使用链表的方法则无法正确判断。
这是因为链表无法像数组和栈一样快速访问和比较元素。
性能比较:我们进一步比较了使用数组和栈的方法在回文判断中的性能差异。
我们使用了不同长度的字符串进行实验,并记录了执行时间。
实验结果显示,数组的执行时间与字符串长度成正比,而栈的执行时间与字符串长度无关。
利用链式堆栈和队列实现回文判断范文

}
*d=p->data;
}
7:撤销堆栈:
void Destory(StNode *head)
{
StNode *p,*p1;
p=head;
while(p!=NULL)
{
p1=p;
p=p->next;
free(p1);
}
}
2、把对队列的创建及操作函数放到LQueue头文件下:
1:头结点结构体的创建:
二、实验目的
熟练运用堆栈和队列的各种操作,并会运用他们的特点做一些实际的应用。
二、实验步骤:
1、把堆栈的创建及操作函数放到LStack头文件下:
1:定义节点结构体:
typedef struct snode
{
DataType data;
struct snode *next;
}StNode;
2:初始化堆栈:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<windows.h>
typedef int DataType;
#include"SLNode.h"
#include"Stack.h"
void main()
{
SLNode *la,*lb;
return 0;
}
p->data=x;
p->next=head->next;
head->next=p;
return 1;
}
5:出栈函数:
int StackPop(StNode *head,DataType *d)
回文判断

设计题目<二>: 3.4.4回文判断P591.设计要求1.1问题描述试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如“序列1&序列2”模式的字符序列。
其中序列1和序列2中都不含字符“&”,且序列2是序列1的逆序列。
例如:“a+b&b+a”是属该模式的字符序列,而“1+3&3-1”则不是。
1.2需求分析这是一个利用栈结构完成的程序。
为了实现算术优先算法,我们使用两个工作栈,一个称为操作符栈(OPTR),用以寄存运算符;一个称为操作数栈(OPND),用以寄存操作数或运算结果。
算法的基本思想是:(1)输入测试数据组数,接着分组输入字符串,以@结尾。
(2)输入序列总长不超过(MAX_N = 10005)/2个。
将序列1先入栈,接着处理序列2,同时出栈判断。
(3)将序列1全部入栈,接着输入序列2,同时出栈判断。
(4)如果序列满足题目要求,则输出“回文序列”;否则,输出“非回文序列”。
(5)测试数据:qwer&rewq@qwerrewq@qwer&rewq12364&23131@2. 概要设计2.1主界面设计回文判断的程序界面设计并不复杂,有提示字符串输入及结束符号的信息即可。
运行界面如下图所示:图2.12.2数据结构本系统采用顺序栈结构类型(stack)存储用户输入的字符串以便判断是否为回文。
typedef struct{char elem[Stack_Size]; //用来存放栈中元素的一维数组int top; //用来存放栈顶元素的下标}SeqStack; 使用结构体,内部定义数组模拟栈。
top为栈顶指针,指向当前元素的下一个位置。
3 模块设计3.1模块设计:本程序包含3个模块:主程序模块,判断模块,和顺序栈操作模块,调用关系如下:主程序回文判断模块顺序栈操作模块图2.23.2 功能模块的调用关系图图2.3调用关系图3.3系统子程序及功能设计本系统共设置6个函数,其中主要包括主函数。
数据结构回文判断

数据结构回文判断在计算机科学和编程的世界里,数据结构是非常重要的一部分。
而回文判断作为一个常见的问题,在数据结构的应用中有着不少有趣的解法。
首先,咱们得搞清楚啥是回文。
简单来说,回文就是一个正着读和倒着读都一样的字符串或者序列。
比如“12321”“racecar”,不管你从前往后读,还是从后往前读,结果都是一样的。
那怎么判断一个字符串是不是回文呢?这就需要用到一些数据结构和算法的知识了。
一种常见的方法是使用数组。
我们可以把要判断的字符串的每个字符都存到一个数组里,然后从数组的两头开始比较。
一头从开头,一头从结尾,一个一个地比,如果对应的字符都一样,那就说明是回文;只要有一对不一样,那就不是回文。
举个例子,比如要判断“racecar”这个字符串是不是回文。
我们先把它的每个字符存到一个数组里:'r','a','c','e','c','a','r'。
然后从两头开始比较,先比较第一个字符'r'和最后一个字符'r',一样;再比较第二个字符'a'和倒数第二个字符'a',也一样;就这样一直比下去,发现都一样,所以“racecar”就是回文。
不过,使用数组来判断回文有一个小小的问题。
那就是如果字符串很长,需要的存储空间就会比较大。
这时候,我们可以考虑使用栈这种数据结构。
栈的特点是先进后出。
我们可以把字符串的前半部分字符依次压入栈中,然后再依次取出栈顶的字符和字符串后半部分的对应字符进行比较。
比如说对于字符串“12321”,我们先把“123”依次压入栈中,然后从字符串的第四个字符开始,和从栈中取出的字符比较。
先取出栈顶的 3 和第四个字符 2 比较,不一样,那就不是回文;如果都一样,那就是回文。
除了栈,队列也能派上用场。
我们可以把字符串的前半部分放入队列,后半部分按照相反的顺序放入另一个队列。
然后依次取出两个队列的队头元素进行比较,如果都一样,就是回文,否则就不是。
回文判断的算法实验报告

实验题目回文判断的算法一、需求分析1.程序的功能:实现对字符序列是否是一个回文序列的判断2.输入输出的要求:从键盘读入一组字符序列,判断是否是回文,并将结果显示在屏幕上3.测试数据:回文字符序列输入:非回文字符序列输入:二、概要设计1.本程序所用的抽象数据类型的定义:typedef struct{char item[STACKSIZE];int top;}SqStack;typedef struct QNode{char data;struct QNode *next;}LQNode, *PQNode;typedef struct{PQNode front,rear;} LinkQueue;2.主程序的流程及各程序模块之间的层次关系。
(1)int InitStack(SqStack *S):栈初始化模块,即初始化一个空栈,随后对该空栈进行数据的写入操作;(2)int Push(SqStack *s, char data):入栈操作,即给空栈中写入数据,数据长度有宏定义给出;(3)int Pop(SqStack *s, char *data):出栈操作,即将栈中的数据输出,由于栈的操作是先进后出,因此,出栈的数据是原先输入数据的逆序;(4)int InitQueue(LinkQueue *q):队列初始化,即初始化一个空队列,最后对该空队列进行数据的写入操作;(5)int EnQueue(LinkQueue *q, char item):入队操作,即给空队列中写入数据,数据长度一样有宏定义给出;(6)int DeQueue(LinkQueue *q, char *item):出队操作,即将队列中的数据输出,由于队列的操作是先进先出,因此,出队的数据室原先输入数据的正序;(7)int main():主函数,用于调用前面的模块,进行出队数据与出栈数据的比较,判断输入的序列是否是回文序列。
模块之间关系及其相互调用的图示:三、详细设计1.采用c语言定义相关的数据类型整形,字符型,指针类型,聚合类型,自定义类型2.写出各模块的伪码算法:参照源程序(1)int InitStack(SqStack *S)(2)int Push(SqStack *s, char data)(3)int Pop(SqStack *s, char *data)(4)int InitQueue(LinkQueue *q)(5)int EnQueue(LinkQueue *q, char item)(6)int DeQueue(LinkQueue *q, char *item)四、调试分析1.调试中遇到的问题及对问题的解决方法: 问题:程序出现未知错误。
数据结构回文判断

数据结构回文判断实验类型:验证型【问题描述】试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如‘序列1&序列2’模式的字符序列。
其中序列1和序列2中都不含字符‘&’,且序列2是序列1的逆序列。
例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3 &3 -1’则不是。
思路:首先建立一个字符数组,长度为100,然后向数组中写入索要判断的字符串。
定义两个指针,一个指向队头,一个指向队尾,队头的指针不断递增,队尾的指针不断递减,在P1<P2的前提下,两个地址上的数据进行比较,如相等则两地址分别向中间靠拢,如对比的结果不同则跳出,但此时P1指针小于P2指针,所以判断字符串不是回文;如两者一直相等直到他们的地址P1=P2或P1>P2(字符串为奇数个)时,跳出并判断为回文;在这其中P1指针的值与P2指针的值有不等的情况就直接判定不是回文。
代码源:// huiwen.cpp : Defines the entry point for the console application. //#include <stdio.h>#include <string.h>int main( void ){char str[100];printf("请输入字符串:");gets( str ); //输入字符char *p1 = str, *p2 = str + strlen(str) - 1;//指针定义for( ; p1 < p2 && *p1 == *p2; ++p1, --p2 );//FOR循环体为空puts( p1 < p2 ? "所输字符串不是回文" : "所输字符串是回文" );return 0;}运行结果:实验结论:通过本次的课程设计,这里的回文就是把回文是指正读和反读均相同的字符序列,所以可以用程序将字符串颠倒后与原字符串相比较,所用到的数据结构有单链表和栈,单链表用于存储字符串,栈用于对单链表中字符串的判定。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
回文判断实验二
洛阳理工学院实验报告
系别计算机系班级B13053
学号B13053235 姓名李登辉
2
课程名称数据结构实验日期2014.3.28 实验名称栈和队列的基本操作成绩
实验目的:
熟悉掌握栈和队列的特点,掌握与应用栈和队列的基本操作算法,训练和提高结构化程序设计能力及程序调试能力。
实验条件:
计算机一台,Visual C++6.0
实验内容:
1.问题描述
利用栈和队列判断字符串是否为回文。
称正读与反读都相同的字符序列为“回文”序列。
要求利用栈和队列的基本算法实现判断一个字符串是否为回文。
栈和队列的存储结构不限。
2.数据结构类型定义
typedef struct
{
char elem[MAX];
int top;
}SeqStack; 顺序栈
3.模块划分
void InitStack(SeqStack *S):栈初始化模块,
int Push(SeqStack *S,char x,int cnt):入栈操作
int Pop(SeqStack * S,char * x):出栈操作
void InitQuene(SeqQuene *Q):队列初始化
int EnterQuene(SeqQuene *Q,char x,int cnt):入队操作
int DeleteQuene(SeqQuene *Q,char *x,int cnt):出队操作
void main():主函数
4.详细设计
#include<stdio.h>
#include<string.h>
#define MAX 50
#define FALSE 0
#define TURE 1//定义栈
typedef struct
{
char elem[MAX];
int top;
}SeqStack;
//定义循环队列
typedef struct
{
char element[MAX];
int front;
int rear;
}SeqQuene;
//初始化栈
void InitStack(SeqStack *S)
{
S->top = -1;//构造一个空栈
}
//入栈
int Push(SeqStack *S,char x,int cnt)
{
if(S->top == cnt-1)
return(FALSE);
S->top++;
S->elem[S->top] = x;
return(TURE);
}
//出栈
int Pop(SeqStack * S,char * x)
{
if(S->top == -1)
return(FALSE);
else
{
*x = S->elem[S->top];
S->top--;
return(TURE);
}
}
//初始化队列
void InitQuene(SeqQuene *Q)
{
Q->front = Q->rear = 0;
}
//入队
int EnterQuene(SeqQuene *Q,char x,int cnt) {
if((Q->rear+1)%(cnt+1) == Q->front) return(FALSE);
Q->element[Q->rear] = x;
Q->rear = (Q->rear+1)%(cnt+1);
return(TURE);
}
//出队
int DeleteQuene(SeqQuene *Q,char *x,int cnt)
{
if(Q->front == Q->rear)
return(FALSE);
*x = Q->element[Q->front];
Q->front = (Q->front+1)%(cnt+1);
return(TURE);
}
//主函数
void main()
{
int i,cnt,flag;
SeqStack s;
SeqQuene q;
char a[MAX],b[MAX],c[MAX];
flag=0;
printf("请输入由*结束且小于%d的回文序列:\n",MAX);
for(i = 0;i<MAX+1;i++)
{
scanf("%c",&a[i]);
if(a[i] == '*')
break;
}
cnt = i;
printf("输入了有%d个字符。
\n",cnt);
InitStack(&s);
InitQuene(&q);
for(i = 0;i<cnt;i++)
{
EnterQuene(&q,a[i],cnt);
Push(&s,a[i],cnt);
}
printf("正序字符串为:\n");
for(i = 0;i<cnt+1;i++)
{
DeleteQuene(&q,&b[i],cnt);
printf("%c",b[i]);
}
printf("\n");
printf("逆序字符串为:\n");
for(i = 0;i<cnt+1;i++)
{
Pop(&s,&c[i]);
printf("%c",c[i]);
}
printf("\n");
for(i = 0;i<cnt+1;i++)
{
if(b[i] == c[i])
flag = 1;
else
{
flag = 0;
break;
}
}
if(flag)
printf("此序列是回文序列!");
else
printf("此序列不是回文序列!");
printf("\n");
}
}
测试数据及结果:
实验总结:读取一个字符,同时存储在顺序栈与链队列之中,直到字符序列的最后一个字符为*停止插入。
在程序中设置了一个标志位flag,将输入的序列分别做入栈、出栈、入队、出队操作,若出栈与出队的数据完全一致,则将flag标志为1,否则为零。
Flag 为1,则表示该序列是回文序列,否则,为非回文序列。