实验4栈的实现和应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);
}
七.实验截图