本文为博主转载文章,转载出处: https://blog.csdn.net/lingfeng2019/article/details/71101939
栈的建立与压栈出栈:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//栈里元素个数
#define SIZE 10
//栈的声明
struct stack{
int sta[SIZE];
int top;
};
//栈的初始化
void init_stack(struct stack* s)
{
memset(s->sta, 0, sizeof(s->sta));
s->top = -1;
}
//压栈
int in_stack(struct stack* s, int data)
{
if(s->top == SIZE-1){
printf("the stack is full. \n");
return 1;
}
(s->top)++;
s->sta[s->top] = data;
return 0;
}
//出栈
int out_stack(struct stack* s)
{
int tmp;
if(s->top < 0 ){
printf("the stack is empty. \n");
return -1;
} else {
tmp = (s->sta)[s->top];
(s->top)--;
return tmp;
}
}
//栈的删除
void destory(struct stack *s)
{
s->top = -1;
memset(s->sta, 0, sizeof(s->sta));
}
int main()
{
struct stack S;
init_stack(&S);
int i , ret ;
for(i=0; i<SIZE; i++){
ret = in_stack(&S, i+10);
if(ret > 0){
printf("in_stack err. \n");
exit(1);
}
}
for(i=0; i<SIZE; i++){
ret = out_stack(&S);
if(ret < 0){
printf("out_stack err. \n");
exit(1);
}
printf("%d\t", ret);
}
printf("\n");
destory(&S);
return 0;
}
结果:
应用:
利用栈先进后出的特性,可以有很多应用。比如十进制转二进制这一类的进制转换,先将十进制取余所得到的数压栈,在将十进制除以2.如此循环至为0.然后将栈里元素依次取出即可。
十进制转二进制:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 32
struct stack{
int sta[SIZE];
int top;
};
void init_stack(struct stack* s)
{
memset(s->sta, 0, sizeof(s->sta));
s->top = -1;
}
int in_stack(struct stack* s, int data)
{
if(s->top == SIZE-1){
printf("the stack is full. \n");
return 1;
}
(s->top)++;
s->sta[s->top] = data;
return 0;
}
int out_stack(struct stack* s)
{
int tmp;
if(s->top < 0 ){
// printf("the stack is empty. \n");
return -1;
} else {
tmp = (s->sta)[s->top];
(s->top)--;
return tmp;
}
}
void destory(struct stack *s)
{
s->top = -1;
memset(s->sta, 0, sizeof(s->sta));
}
int ten_2_bin(struct stack* s, int ten)
{
int tmp = ten;
if(ten < 0){ //将负数变成正数,同时前面加负号。
ten = ~ten+1;
printf("-");
}
if(ten == 0)
in_stack(s, tmp);
else {
while(ten){
tmp = ten%2;
in_stack(s, tmp);
ten = ten / 2;
}
}
}
int main()
{
struct stack S;
init_stack(&S);
int i=0 ;
int ret ;
ten_2_bin(&S, 4);
printf("4=");
while((ret = out_stack(&S)) >= 0){
printf("%d", ret);
}
printf("\n");
destory(&S);
return 0;
}
结果:
---------------------
作者:C后台开发从入门到就业
来源:CSDN
原文:https://blog.csdn.net/lingfeng2019/article/details/71101939