数据结构C语言版判断回文数试验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
.
数据结构实验报告判断回文数
级班:
内序号班:
名生姓学:
教师导指:
时间: 201124月年10日
一、实验目的'.
.
熟悉栈和队列的各项操作,区别栈和队列的操作原理。
二、实验内容
利用栈的操作完成读入的一个以*结尾的字符序列是否是回文序列的判断。
回文序列即正读与反读都一样的字符序列,例如:43211234*是回文序列,而789678*不是。三、数据结构及算法思想
算法思想:从键盘上读取一个字符,同时存储在顺序栈与链队列之中,直到字符序列的最后一个字符为*停止插入。在程序中设置了一个标志位flag,将输入的序列分别做入栈、出栈、入队、出队操作,若出栈与出队的数据完全一致,则将flag标志为1,否则为零。Flag为1,则表示该序列是回文序列,否则,为非回文序列。
四、模块划分
1.对各个模块进行功能的描述
(1)void InitStack(SeqStack *S):栈初始化模块,即初始化一个空栈,随后对该空栈进行数据的写入操作;
(2)int Push(SeqStack *S,char x,int cnt):入栈操作,即给空栈中写入数据,数据长度有宏定义给出;
(3)int Pop(SeqStack * S,char * x):出栈操作,即将栈中的数据输出,由于栈的操作是先进后出,因此,出栈的数据是原先输入数据的逆序;
(4)void InitQuene(SeqQuene *Q):队列初始化,即初始化一个空队列,最后对该空队列进行数据的写入操作;
(5)int EnterQuene(SeqQuene *Q,char x,int cnt):入队操作,即给空队列中写入数据,数据长度一样有宏定义给出;
(6)int DeleteQuene(SeqQuene *Q,char *x,int cnt):出队操作,即将队列中的数据输出,由于队列的操作是先进先出,因此,出队的数据室原先输入数据的正序;
(7)void main():主函数,用于调用前面的模块,进行出队数据与出栈数据的比较,判断输入的序列是否是回文序列。
2.模块之间关系及其相互调用的图示
'.
.
五、详细设计及运行结果(1)程序设计及编码
#include
#include
#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;
牰湩晴尨请输入由*结束且小于%d的回文序列:\n,MAX); for(i = 0;i { scanf(%c,&a[i]); if(a[i] == '*') break; } cnt = i; 牰湩晴尨输入了有%d个字符。\n,cnt); InitStack(&s); InitQuene(&q); for(i = 0;i { EnterQuene(&q,a[i],cnt); Push(&s,a[i],cnt); } 牰湩晴尨正序字符串为:\n);