顺序栈的基本操作讲解

  • 格式:docx
  • 大小:28.05 KB
  • 文档页数:7

下载文档原格式

  / 7
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

遼穿紳範大學上机实验报告

学院:计算机与信息技术学院

计算机科学与技术(师

范)

课程名称:数据结构

实验题目:顺序栈的基本操作

班级序号:师范1班

学号:201421012731

学生姓名:邓雪

指导教师:杨红颖

完成时间:2015年12月25号

一、实验目的:

1 •熟悉掌握栈的定义、结构及性质;

2. 能够实现创建一个顺序栈,熟练实现入栈、出栈等栈的基本操作;

3•了解和掌握栈的应用。

二、实验环境:

Microsoft Visual C++ 6.0

三、实验内容及要求:

栈是一种特殊的线性表,逻辑结构和线性表相同,只是其运算规则有更多的限制,故又称为受限的线性表。

建立顺序栈,实现如下功能:

1. 建立一个顺序栈

2. 输出栈

3. 进栈

4. 退栈

5. 取栈顶元素

6. 清空栈

7. 判断栈是否为空

进行栈的基本操作时要注意栈”后进先出”的特性。

四、概要设计:

1、通过循环,由键盘输入一串数据。创建并初始化一个顺序栈。

2、编写实现相关功能函数,完成子函数模块如下。

3、调用子函数,实现菜单调用功能,完成顺序表的相关操作

五、代码:

#include #include #define maxsize 64 typedef int datatype;

//定义结构体typedef struct {

datatype data[maxsize]; int top;

}seqstack;

//建立顺序栈seqstack *SET(seqstack *s) {

int i; s=(seqstack*)malloc(sizeof(seqstack)); s->top=-1;

printf(" 请输入顺序栈元素(整型,以scanf("%d",&i);

do{ s->top++; s->data[s->top]=i; scanf("%d",&i);

0 结束):");

}while(i!=0); printf(" 顺序栈建立成功\n");

return s;

}

//清空栈void SETNULL(seqstack *s) {

s->top=-1;}

//判断栈空

int EMPTY(seqstack *s)

{

if(s->top>=0)

return 0;

else return 1;}

//进栈

seqstack *PUSH(seqstack *s)

{

int x;

printf(" 你想要插入的数字:"); scanf("%d",&x);

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--;

printf(" 删除的栈顶元素是:");

printf("%d\n",(s->data[s->top+1]));

}

return s;

}

//取栈顶

void TOP(seqstack *s)

{

if(s->top<0)

{

printf("stack is empty");

}

else

{

printf(" 当前的栈顶元素是:"); printf("%d\n",(s->data[s->top]));

}

}

//输出栈

void print(seqstack *s)

{

int i;

if(s->top<0)

{

printf(" 清空栈成功!");

}

for(i=s->top;i>=0;i--) printf("%d ",s->data[i]);

}

//主函数

int main()

{

seqstack *s; int i,j;

printf("\n\n\t\t\t\t 欢迎使用\n");

printf("\t\t __________________________________________ \n");

printf("\t\t\t1. 建立一个顺序栈\n");

printf("\t\t\t2. 输出栈\n");

printf("\t\t\t3. 进栈\n");

printf("\t\t\t4. 退栈\n");

printf("\t\t\t5. 取栈顶元素\n");

printf("\t\t\t6. 清空栈\n");

printf("\t\t\t7. 判断栈是否为空\n"); printf("\t\t\t8. 结束程序\n");

printf("\t\t __________________________________________ \n");

do

{

printf("\n\n 请选择想要实现的功能:"); scanf("%d",&i);

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)