实验四:栈的实现和运用

您所在的位置:网站首页 栈的链式存储结构实验报告 实验四:栈的实现和运用

实验四:栈的实现和运用

2024-07-16 05:18| 来源: 网络整理| 查看: 265

**栈(Stack)**又称堆栈,它是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算。人们把此端称为栈顶,栈顶的第一个元素被称为栈顶元素,相对地,把另一端称为栈底。向一个栈插入新元素又称为进栈或入栈,它是把该元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称为出栈或退栈,它是把栈顶元素删除掉,使其下面的相邻元素成为新的栈顶元素。 在这里插入图片描述

#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);//top>=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 Underflow"); return (NULL); } else { S->Top--; temp=(datatype *)malloc(sizeof (datatype));//向系统申请分配指定size个字节的内存空间 *temp= S->elements[S->Top+1]; return (temp); } } void conversion(int n) { Stack S; setNull(&S);//置空栈 int r,m; 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"); } int main() { int num; printf("请输入需要转换为二进制的十进制数据\n"); scanf("%d",&num); conversion(num); }

在这里插入图片描述 最后加上没有打注释的代码:

#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); } /* isempty */ 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 Underflow"); return (NULL); } else { S->Top--; temp=(datatype *)malloc(sizeof (datatype)); *temp= S->elements[S->Top+1]; return (temp); } } /* pop */ void conversion(int n) { Stack S; setNull(&S); int r,m; 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); }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3