上机实验报告
学 院: 计算机与信息技术学院 专 业: 计算机科学与技术(师范) 课程名称: 数据结构
实验题目: 顺序栈的基本操作 班级序号: 师范1班 学 号: 201421012731 学生姓名: 邓雪 指导教师: 杨红颖
完成时间: 2015年12月25号
。
1
。
一、实验目的:
1.熟悉掌握栈的定义、结构及性质;
2.能够实现创建一个顺序栈,熟练实现入栈、出栈等栈的基本操作; 3.了解和掌握栈的应用。 二、实验环境:
Microsoft Visual c++ 6.0 三、实验内容及要求:
栈是一种特殊的线性表,逻辑结构和线性表相同,只是其运算规则有更多的限制,故又称为受限的线性表。 建立顺序栈,实现如下功能:
1.建立一个顺序栈 2.输出栈 3.进栈 4.退栈 5.取栈顶元素 6.清空栈 7.判断栈是否为空
进行栈的基本操作时要注意栈\"后进先出\"的特性。 四、概要设计:
1、通过循环,由键盘输入一串数据。创建并初始化一个顺序栈。 2、编写实现相关功能函数,完成子函数模块如下。 3、调用子函数,实现菜单调用功能,完成顺序表的相关操作
main 建顺序栈 进栈 出栈 取栈顶 清空 输出 判栈空
。
2
。
五、代码: #include //定义结构体 typedef struct { datatype data[maxsize]; int top; }seqstack; //建立顺序栈 seqstack *SET(seqstack *s) { } //清空栈 void SETNULL(seqstack *s) { s->top=-1;} 。 int i; s=(seqstack*)malloc(sizeof(seqstack)); s->top=-1; printf(\"请输入顺序栈元素(整型,以0结束):\"); scanf(\"%d\do{ s->top++; s->data[s->top]=i; scanf(\"%d\ }while(i!=0); printf(\"顺序栈建立成功\\n\"); return s; 3 //判断栈空 int EMPTY(seqstack *s) { if(s->top>=0) return 0; else return 1;} //进栈 seqstack *PUSH(seqstack *s) { int x; printf(\"你想要插入的数字:\"); scanf(\"%d\ if(s->top==maxsize-1) { printf(\"overflow\"); return NULL; } else { s->top++; s->data[s->top]=x; } return s; } //退栈 seqstack *POP(seqstack *s) { if(s->top<0) { printf(\"underlow\"); return s; } else { s->top--; 。 。4 。 } } printf(\"删除的栈顶元素是:\"); printf(\"%d\\n\ return s; //取栈顶 void TOP(seqstack *s) { } //输出栈 void print(seqstack *s) { } //主函数 int main() { seqstack *s; int i,j; 。 if(s->top<0) { } else { } printf(\"当前的栈顶元素是:\"); printf(\"%d\\n\printf(\"stack is empty\"); int i; if(s->top<0) { } for(i=s->top;i>=0;i--) printf(\"%d \printf(\"清空栈成功!\"); 5 。 printf(\"\\n\\n\\\\欢迎使用\\n\"); printf(\"\\___________________________________________\\n\"); printf(\"\\\1.建立一个顺序栈\\n\"); printf(\"\\\2.输出栈\\n\"); printf(\"\\\3.进栈\\n\"); printf(\"\\\4.退栈\\n\"); printf(\"\\\5.取栈顶元素\\n\"); printf(\"\\\6.清空栈\\n\"); printf(\"\\\7.判断栈是否为空\\n\"); printf(\"\\\8.结束程序\\n\"); printf(\"\\___________________________________________\\n\"); do { printf(\"\\n\\n请选择想要实现的功能:\"); scanf(\"%d\switch(i) { case 1:s=SET(s); break; case 2:print(s); printf(\"\\n\");break; case 3:s=PUSH(s); print(s); printf(\"\\n\");break; case 4:s=POP(s); print(s); printf(\"\\n\"); break; case 5:TOP(s); break; case 6:SETNULL(s); print(s); printf(\"\\n\"); break; case 7:j=EMPTY(s); if(j==1) 。 6 。 } printf(\"空栈\\n\"); else printf(\"非空栈\\n\"); break; case 8:printf(\"_________________谢谢使用__________________\\n\"); exit (0); } }while(1); return 0; 六、运行界面 菜单 功能 。 7 。 七、实验中遇到的问题及总结 1.在写主函数时,如果是用void main的形式,那么可以不用有返回值,如果是int main或status main的话,要有返回值,即末尾要有return语句。 2.应当注意,在算法POP中,删去栈顶元素只要将栈顶指针减1即可,但该元素在下次进栈之前仍是存在的。 2.本次实验加强了对栈的理解和认识以及栈的应用,实现栈的相关操作。 八、参考文献 《数据结构——用C语言描述》单纯的课本内容,并不能满足学生的需要,通过补充,达到内容的完善 教育之通病是教用脑的人不用手,不教用手的人用脑,所以一无所能。教育革命的对策是手脑联盟,结果是手与脑的力量都可以大到不可思议。 。 8 。 欢迎您的下载, 资料仅供参考! 致力为企业和个人提供合同协议,策划案计划书,学习资料等等 打造全网一站式需求 。 9 因篇幅问题不能全部显示,请点此查看更多更全内容