您的当前位置:首页正文

顺序栈的基本操作

2023-05-20 来源:步旅网
。

上机实验报告

学 院: 计算机与信息技术学院 专 业: 计算机科学与技术(师范) 课程名称: 数据结构

实验题目: 顺序栈的基本操作 班级序号: 师范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 #include #define maxsize 64 typedef int datatype;

//定义结构体 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

因篇幅问题不能全部显示,请点此查看更多更全内容