实验4栈的实现和应用

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

陕西科技大学实验报告

姓名班级学号实验组别

实验日期室温报告日期成绩

报告内容:(目的和要求、原理、步骤、数据、计算、小结等)

一、实验名称:栈的实现与应用

二、实验目的:

1.掌握栈的定义。

2.掌握栈基本操作的实现,并能用于解决实际问题。

三、实验环境:Windows2000,Visual C++ 6.0

四、实验内容:

1.实现栈的如下基本操作:push,pop,isempty,isfull,createstack。

2.利用栈的基本操作实现conversion()函数,该函数能将任意输入的十进制整数转换为二进制形式表示。

五、实验原理:

1.栈的基本概

栈(stack)是一种特殊的线性表。是将线性表的插入和删除均是仅在表的一端进行,通常将允许插入和删除的一端称栈顶(Top),因此栈顶的当前位置是动态变化的,它由一个称为栈顶指针的位置指示器指示。同时,表的一端称栈底(Bottom)。当栈中没有元素时称为空栈。栈的插入操作被形象的称为进栈或入栈,删除操作称为出栈或退栈。

2.栈的结构特性

通常栈可以用线性的方式存储,分配一块连续的存储区域存放栈中的元素,并用一个变量指向当前的栈顶。

每次进栈的元素都被放在原栈顶元素之上而成为新的栈顶,而每次出栈的总是当前栈中“最新”的元素,即最后进栈的元素。元素是以a1,a2,a3,...,an的顺序进栈的,而退栈的次序却是an,...,a3,a2,a1。栈的修改是按后进先出的顺序进行的。因此,栈又称为后进先出的线性表,简称为LIFO表.

3.栈的建立

C语言中用一维数组来实现栈.假设栈的元素个数最大不超过Maxsize,所有的元素都具有同一个数据类datatype,则可以用下列方式来定义栈的类型stack:

typedef struct

{

datatype elements[maxsize];

int Top;

}Stack;

4.栈的压入(push)

void push(ST,x)

stak *ST ;

ElemType x;

{

if(ST->top==Maxsize-1)

printf(“栈上溢出!\n”);

else

{

ST->top++;

ST->s[ST->top]=x;

}}

5.栈的弹出pop(ST)

void pop(ST,x)

stak *ST ;

{

if(ST->top==-1)

printf(“栈上溢出!\n”);

else

ST->top--;

}

6.判断栈是否为空(isempty)

int sempty(ST)

stack *ST;

{

if(ST->top==-1)return(1);

else

return(0)}

7.读栈顶元素top(ST,x)

Void pop(ST,x)

Stack *ST

ElemType *x;

{

If(ST->top==-1)printf(“无栈顶元素!\n”);

else *x=ST->s[ST->top];

}

8.取栈顶元素ptop(ST)

ElemType ptop(ST)

Stack *ST;

{

Elemtype x; /*将栈顶元素赋给x*/

top (ST,&x); /* 将栈顶元素弹出*/

pop(ST); /*返回x值*/

return(x);

}

五.实验流程:

六.程序代码

#include

#include

#define maxsize 1024

typedef int datatype;

typedef struct

{

datatype elements[maxsize];

int Top;

}Stack;

void setNull(Stack *S)

{S->Top=-1;}

int isfull(Stack *S)

{if(S->Top>=maxsize-1)

return(1);

else return(0);

}

int isempty(Stack *S)

{if(S->Top>=0)return(0);

else return(1);

}

void push(Stack *S,datatype E)

{if(S->Top>=maxsize-1)

{printf("Stack Overflow");}

else

{S->Top++;

S->elements[S->Top]=E;

}

}

datatype *pop(Stack *S)

{datatype *temp;

if(isempty(S))

{

printf("Stack Underfiow");

return(NULL);

}else

{S->Top--;

temp=(datatype *)malloc(sizeof(datatype));

*temp=S->elements[S->Top+1];

return(temp);}

}

void conversion(int n)

{int r,m;

Stack S;

setNull(&S);

r=n;

while(r)

{

m=r%2;

if(isfull(&S))printf("Over flow\n");

else push(&S,m);

r=r/2;

}

printf("转换后的二进制为\n");

while(!isempty(&S))

printf("%d",*(pop(&S)));

printf("\n");

}

void main()

{

int num;

printf("请输入需要转换为二进制的十进制数据\n");

scanf("%d",&num);

conversion(num);

}

七.实验截图

相关文档
最新文档