**栈(Stack)**又称堆栈,它是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算。人们把此端称为栈顶,栈顶的第一个元素被称为栈顶元素,相对地,把另一端称为栈底。向一个栈插入新元素又称为进栈或入栈,它是把该元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称为出栈或退栈,它是把栈顶元素删除掉,使其下面的相邻元素成为新的栈顶元素。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/bcda212951bb75f72174b2c239ccdd2f.png)
#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);
}
|