数据结构C语言版判断回文数试验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档