栈和队列的基本操作及其应用数据结构实验报告书.doc_第1页
栈和队列的基本操作及其应用数据结构实验报告书.doc_第2页
栈和队列的基本操作及其应用数据结构实验报告书.doc_第3页
栈和队列的基本操作及其应用数据结构实验报告书.doc_第4页
栈和队列的基本操作及其应用数据结构实验报告书.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构实验报告 计科111 * 201100814*数据结构实验报告书实验内容:栈和队列的基本操作及其应用201100814* 计科111* 前言计算机编程中加工处理的对象是数据,而数据具有一定的组织结构,所以学习计算机编程仅仅了解计算机语言是不够的,还必须掌握数据的组织、存储和运算的一般方法,这便是数据结构课程中所研究的内容,也是我们编写计算机程序的重要基础,由于它对计算机学科起到承前启后的作用,因此本课程被列为计算机等相关专业最重要的专业基础课;同时数据结构是计算机专业教学的一门核心课程。计算机各领域都要用到各种数据结构,而且要从事计算机科学与技术工作,尤其是计算机领域的软件开发工作,必须具备较强的数据结构基础。数据结构课程内容丰富、学习量大,实践性强;隐含在各部分内容中的方法和技术多;算法设计具有动态性和抽象性等特点,看懂听明白与掌握会应用之间有相当大的一段距离。所以学生必须多实践才能进一步加深对课程的理解,理解和掌握算法设计所需的方法和技术,为整个专业学习打下良好的基础。一、实验目的1、帮助读者复习C+语言程序设计中的知识。2、熟悉线性表的逻辑结构。3、熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉链表的操作为侧重点。二、实验内容本次实验提供2个题目,每个题目都标有难度系数,*越多难度越大,学生可以根据自己的情况任选一个!本人由于初学,对数据结构的操作知识欠缺,所以选了2个实验题目中的第1个题目如下:题目一:回文判断(*)问题描述对于一个从键盘输入的字符串,判断其是否为回文。回文即正反序相同。如“abba”是回文,而“abab”不是回文。基本要求(1)数据从键盘读入;(2)输出要判断的字符串; (3)利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“Yes”,否则输出“No”。测试数据由学生任意指定。3、 算法设计1、 程序所需头文件已经预处理宏定义如下#include#include#define OVERFLOW -1#define OK 1#define ERROR 0#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef char SElemType; typedef int Status;typedef struct SElemType *base;SElemType *top;int stacksize;SqStack;typedef char QElemType;typedef struct QNode QElemType data;struct QNode *next;QNode,*QNodePtr;typedef structQNodePtr front;QNodePtr rear;LinkQueue;2、 程序中所需的操作栈的POP和PUSH函数 Status Push(SqStack &S,SElemType e)/插入e为新的栈顶元素if(S.top-S.base=S.stacksize)/栈满,追加存储空间 S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType); if(!S.base)exit (OVERFLOW);/存储空间分配失败 S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT;*S.top+=e;return OK;/Push函数Status Pop(SqStack &S ,SElemType &e)/若栈不空,删除栈顶元素,并用e返回其值if(S.top=S.base) return ERROR;e=*-S.top;return OK;/Pop函数3、 程序中所需的操作队列的函数Status EnQueue(LinkQueue &Q,QElemType e) QNodePtr p;p=(QNodePtr)malloc(sizeof(QNode);if(!p)exit(OVERFLOW);p-data=e;p-next=NULL;Q.rear-next=p;Q.rear=p;return OK;Status DeQueue(LinkQueue &Q,QElemType &e)QNodePtr p;if(Q.front=Q.rear) return ERROR;p=Q.front-next; e=p-data;Q.front-next=p-next;if(Q.rear=p) Q.rear=Q.front;free(p);return OK;4、 另外,还有创建栈和创建一个空的链式栈Status CreatStack(SqStack &S)S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType);if(!S.base)exit(OVERFLOW);S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;/创建栈Status CreatQueue(LinkQueue &Q)Q.front=Q.rear=(QNodePtr)malloc(sizeof(QNode);if(!Q.front)exit(OVERFLOW);Q.front-next=NULL;return OK;/建立一个空的链式栈5、 再就是最重要的判断部分int Test()/判别输入的字符串是否回文序列,是则返回1,否则返回0SqStack S;LinkQueue Q;CreatStack(S);CreatQueue(Q); char c; SElemType a,b;while(c=getchar()!=) Push(S,c);EnQueue(Q,c); /同时使用栈和队列两种结构while(S.top!=S.base) Pop(S,a);DeQueue(Q,b); if(a!=b) return ERROR;return OK;判断输入的字符串是否回文序列,是则返回1,否则返回04、 调试与测试 我们开始测试数据:12321,如图:输出结果是YES,说明程序判断出12321是回文然后我们测试12345,如图输出结果是NO,所以程序判断12345不是回文五、总结通过做这次实验,发现自己在数据结构这门课中还有很多不足有很多知识还没掌握,所以在写程序的时候出现了很多的错误,及还有很多的知识不以灵活运用,特别是对栈和队列的操作问题。因为以前C语言没有掌握好,所以这次做本次实验还是有点吃力,刚开始完全没有思,后来经过查找资料,在自己的努力下和同学的帮助下,终于完了本次实验。此次实验发现的自己的不足,我相信在以后的学习中,我会更加的努力。六、源代码#include#include#define OVERFLOW -1#define OK 1#define ERROR 0#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef char SElemType; typedef int Status;typedef struct SElemType *base;SElemType *top;int stacksize;SqStack;typedef char QElemType;typedef struct QNode QElemType data;struct QNode *next;QNode,*QNodePtr;typedef structQNodePtr front;QNodePtr rear;LinkQueue;Status CreatStack(SqStack &S)/创建栈S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType);if(!S.base)exit(OVERFLOW);S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;Status Push(SqStack &S,SElemType e)/插入e为新的栈顶元素if(S.top-S.base=S.stacksize)/栈满,追加存储空间 S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType); if(!S.base)exit (OVERFLOW);/存储空间分配失败 S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT;*S.top+=e;return OK;/PushStatus Pop(SqStack &S ,SElemType &e)/若栈不空,删除栈顶元素,并用e返回其值if(S.top=S.base) return ERROR;e=*-S.top;return OK;/PopStatus CreatQueue(LinkQueue &Q)/建立一个空的链式栈Q.front=Q.rear=(QNodePtr)malloc(sizeof(QNode);if(!Q.front)exit(OVERFLOW);Q.front-next=NULL;return OK;Status EnQueue(LinkQueue &Q,QElemType e)QNodePtr p;p=(QNodePtr)malloc(sizeof(QNode);if(!p)exit(OVERFLOW);p-data=e;p-next=NULL;Q.rear-next=p;Q.rear=p;return OK;Status DeQueue(LinkQueue &Q,QElemType &e)QNodePtr p;if(Q.front=Q.rear) return ERROR;p=Q.front-next; e=p-data;Q.front-next=p-next;if(Q.rear=p) Q.rear=Q.front;free(p);return OK;int Test()/判别输入的字符串是否回文序列,是则返回1,否则返回0SqStack S;LinkQueue Q;CreatStack(S);CreatQueue(Q); char c; SElemType a,b;whil

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论