欢迎来到天天文库
浏览记录
ID:61510785
大小:33.50 KB
页数:9页
时间:2021-02-08
《栈的应用实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、重庆科技学院学生实验报告课程名称算法与数据结构实验项目名称栈的实现与应用开课院系及实验室数理学院实验室I217实验日期10.10学生姓名冯帅学号专业班级应数09指导教师陈小强实验成绩教师评语:教师签字:批改时间:一、实验目的和要求1、掌握栈和队列的特点,即先进后出与先进先出的原则。2、掌握栈和队列的顺序存储结构和链式存储结构及其基本操作,以便在实际问题中灵活运用。3、掌握栈和队列的基本操作实现方法。二、实验内容1、栈的实现:用C语言实现栈,包括类型定义和各种基本运算的实现,并在此基础上设计一个主程序,测试栈的一些基本运算:(1).初始化(2).
2、入栈(3).出栈(4).取栈顶元素(5).遍历栈(6).置空栈请根据下面给出的程序(改进的顺序栈),完成这次实验,并与链栈的实现方法相比较:/*Common.h*/#defineTRUE1//逻辑,是#defineFALSE0//逻辑,否#defineOK1//状态,成功#defineFAILURE0//状态,未成功#defineERROR-1//状态,失败#defineOVERFLOW1//溢出typedefintBOOL;typedefintStatus;/*seqstack.h*/#include#include3、lib.h>#include"common.h"#defineLIST_INIT_SIZE80//线性表存储空间的初始分配量#defineLISTINCREMENT10//线性表存储空间的分配增量typedefintElemType;//栈typedefstruct{ElemType*elem;//存储空间基址inttop;//栈顶指示intcurrentsize;//当前分配的长度}SeqStack;/*构造一个空的栈*/SeqStack*CreateStack();/*释放栈分配的空间*/voidDestroyStack(SeqStack*4、S);/*判空*/intIsEmpty(SeqStack*S);/*入栈*/StatusPush(SeqStack*S,ElemTypee);/*出栈*/StatusPop(SeqStack*S,ElemType*e);/*取栈顶元素*/StatusGetTop(SeqStack*S,ElemType*e);/*遍历*/voidTraverse(SeqStack*S,void(*visit)(ElemType,int));/*seqstack.c*/#include#include#include"comm5、on.h"#include"seqstack.h"/*构造一个空的栈*/SeqStack*CreateStack(){SeqStack*S=(SeqStack*)malloc(sizeof(SeqStack));if(S==NULL){exit(OVERFLOW);}S->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(S->elem==NULL){exit(OVERFLOW);}S->top=-1;S->currentsize=LIST_INIT_SIZE;returnS;6、}/*释放栈分配的空间*/voidDestroyStack(SeqStack*S){if(S!=NULL){if(S->elem!=NULL){free(S->elem);}S->elem=NULL;}}/*判空*/intIsEmpty(SeqStack*S){returnS->top==-1;}/*入栈*/StatusPush(SeqStack*S,ElemTypee){if(S->top>=S->currentsize)//当前存储空间已满,增加分配{ElemType*newbase=(ElemType*)realloc(S->elem,(7、S->currentsize+LISTINCREMENT)*sizeof(ElemType));if(newbase==NULL)//存储分配失败{exit(OVERFLOW);}S->elem=newbase;//新基址S->currentsize+=LISTINCREMENT;//增加存储容量}++(S->top);S->elem[S->top]=e;returnOK;}/*出栈*/StatusPop(SeqStack*S,ElemType*e){if(S->top==-1)//空栈{returnFAILURE;}(*e)=S->elem[8、S->top];--(S->top);//表长减1returnOK;}/*取栈顶元素*/StatusGetTop(SeqStack*S,ElemTyp
3、lib.h>#include"common.h"#defineLIST_INIT_SIZE80//线性表存储空间的初始分配量#defineLISTINCREMENT10//线性表存储空间的分配增量typedefintElemType;//栈typedefstruct{ElemType*elem;//存储空间基址inttop;//栈顶指示intcurrentsize;//当前分配的长度}SeqStack;/*构造一个空的栈*/SeqStack*CreateStack();/*释放栈分配的空间*/voidDestroyStack(SeqStack*
4、S);/*判空*/intIsEmpty(SeqStack*S);/*入栈*/StatusPush(SeqStack*S,ElemTypee);/*出栈*/StatusPop(SeqStack*S,ElemType*e);/*取栈顶元素*/StatusGetTop(SeqStack*S,ElemType*e);/*遍历*/voidTraverse(SeqStack*S,void(*visit)(ElemType,int));/*seqstack.c*/#include#include#include"comm
5、on.h"#include"seqstack.h"/*构造一个空的栈*/SeqStack*CreateStack(){SeqStack*S=(SeqStack*)malloc(sizeof(SeqStack));if(S==NULL){exit(OVERFLOW);}S->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(S->elem==NULL){exit(OVERFLOW);}S->top=-1;S->currentsize=LIST_INIT_SIZE;returnS;
6、}/*释放栈分配的空间*/voidDestroyStack(SeqStack*S){if(S!=NULL){if(S->elem!=NULL){free(S->elem);}S->elem=NULL;}}/*判空*/intIsEmpty(SeqStack*S){returnS->top==-1;}/*入栈*/StatusPush(SeqStack*S,ElemTypee){if(S->top>=S->currentsize)//当前存储空间已满,增加分配{ElemType*newbase=(ElemType*)realloc(S->elem,(
7、S->currentsize+LISTINCREMENT)*sizeof(ElemType));if(newbase==NULL)//存储分配失败{exit(OVERFLOW);}S->elem=newbase;//新基址S->currentsize+=LISTINCREMENT;//增加存储容量}++(S->top);S->elem[S->top]=e;returnOK;}/*出栈*/StatusPop(SeqStack*S,ElemType*e){if(S->top==-1)//空栈{returnFAILURE;}(*e)=S->elem[
8、S->top];--(S->top);//表长减1returnOK;}/*取栈顶元素*/StatusGetTop(SeqStack*S,ElemTyp
此文档下载收益归作者所有