- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构 C 语言回文判断(运用 栈 以及队列完成)
班
班 学
数据结构实验报告
回文判断
级:
号:
学生姓名:
指导教师:
时 间: 2015 年 5 月 5 日
1.实验目的 : 熟悉栈和队列的各项操作,区别栈和 队列 的操作原理。
2. 实验内容:
利用栈的操作完成读入的一个以 @吉尾的 字符序列是否是回文序列的判断.
回文序列即正读与反读都一样的字符序 列 ;
123 、123312 盗
4如: 123321 硬;
算法思想:从键盘上读取一个字符,同时存储在 顺 序栈与链队列之中,直到字符序列的最后一个 字符 为 雷止输入,因为要满足特定的要求:序 列 1 听列 2,故设置夜歌标记量 falg=1,判断输 入的元素个数是 否为奇数个,若为偶数个则令flag=0,若为奇数个继 续判断栈的中间元素是否 为,若不是则令flag=0 , 若是,将栈和队列中
的元素依次出列,判断是否相等,若不相等则令
flag=0,最后将 flag 的值返回给主函数,若 flag
被修改为 0 说明不是回文序列,否则反之! ! 判断 回文序列的流程图:
Y m%2!=0 N
初始化
初始化栈s-Ineit[(/)==^
初始化队列 InitQ(q)
flag=0
:B i(m+l)/2 cfhl
Y\ch!=@ =0 N
enter(q,ch)
flag=0
m++
pop(s,ch1)
printf(%c,ch) deleteq(q,ch2)
push(s,ch) Y ch1!=ch2 N
当 ch!=@时 i=1
i++
算N
算
法实现:
(1) void InitStack(SeqStack *s):栈初始化模块 , 即初始化一个空栈,随后对该空栈进行数据的写 入
操作;
(2) int push(SeqStack *s,char ch):入栈操作, 即给
空栈中写入数据;
(3) int pop(SeqStack *s,char *x):出栈操作, 即 将栈中的数据输出,由于栈的操作是先进后 出,因
此,出栈的数据是原先输入数据的逆序;
(4) void InitQuene(LinkQ *q):队列初始化,
即初始化一个空队列,最后对该空队列进行数据 的
写入操作;
(5) int enter(LinkQ *q,char ch):入队操作, 即给
空队列中写入数据;
(6) int deleteq(LinkQ *q,char *c):出队操作, 即
将队列中的数据输出,由于队列的操作是先进 先出,
因此,出队的数据室原先输入数据的正序;
(7) int huiwen(SeqStack s,LinkQ q):输入序列 并 判断所输入的序列是否是回文序列;
(8) void main():主函数,用于调用前面的模 块, 并输出最终的判断结果。
3. 实验感想与体会
通过本次的上机,对栈的各项基本操作都有了更 好 的掌握,同时明白了一些小的细节问题可能会 影响 到整个程序的正确的运行,本次的实验我通 过了运 用栈和队列,可以说对队列的一些基本的 操作也得 以了巩固和提高!更加体会到,自己写 程序上机操 作的重要性,它要比课本上学的要多 得多!
4. 附录(源代码及运行图) #include stdio.h
#include stdlib.h
#define MAX 100
typedef struct// 栈结构体
(
char e[MAX];
int top;
}SeqStack;
typedef struct NODE// 队列结构体
(
char d;
struct NODE *next;
}LinkQN;
typedef struct//封装头指针为指针
(
LinkQN *front;
LinkQN *rear;
}LinkQ;
void InitStack(SeqStack *s)// 初始化顺序栈
(
s-top=-1;
)
int push(SeqStack *s,char ch)// 入栈
(
if(s-top==MAX-1)
return(0);
s-top++;
s-e[s-top]=ch;
return(1);
}
int pop(SeqStack *s,char *x)// 出栈
(
if(s-top==-1)
return(0);
else
(
*x=s-e[s-top];
s-top--;
return(1);
}
} void InitQuene(LinkQ *q)// 链队列初始化 q-front=(LinkQN *)malloc(sizeof(LinkQN)); if(!q-front)
(
p
文档评论(0)