数据结构实验报告 回文判断 班 级 : 学 号 : 学生 姓 名 : 指 导 教 师 : 时间 : 2015 年 5 月 5 日 1.实验目的:熟悉栈和队列的各项操作,区别栈和队列的操作原理
2.实验内容: 利用栈的操作完成读入的一个以@结尾的字符序列是否是回文序列的判断
回文序列即正读与反读都一样的字符序列; 例如:123&321@是; 123&4321@、123&312@不是 算法思想:从键盘上读取一个字符,同时存储在顺序栈与链队列之中,直到字符序列的最后一个字符为@停止输入,因为要满足特定的要求:序列1&序列2,故设置夜歌标记量 falg=1,判断输入的元素个数是否为奇数个,若为偶数个则令 flag=0,若为奇数个继续判断栈的中间元素是否为&,若不是则令 flag=0,若是,将栈和队列中的元素依次出列,判断是否相等,若不相等则令 flag=0,最后将 flag 的值返回给主函数,若 flag 被修改为 0 说明不是回文序列,否则反之
判断回文序列的流程图: 算法实现: (1)v oid InitStack(SeqStack *s):栈初始化模块,即初始化一个空栈,随后对该空栈进行数据的写入操作; (2)int pu sh(SeqStack *s,char ch):入栈操作,即给空栈中写入数据; (3)int pop(SeqStack *s,char *x ):出栈操作,即将栈中的数据输出,由于栈的操作是先进后出,因此,出栈的数据是原先输入数据的逆序; 初始化栈InitS(&s) 初始化队列InitQ(&q) 当 ch
='@'时 ch=getch() Y ch
='@' N printf("%c",ch) pu sh(&s,ch) enter(&q,ch) m++ Y m%2
=0 N Y s->e[m/2]==