顺序栈实现十进制转换成二进制
原理很简单,只是用来实验一下顺序栈的功能
首先还是.h文件
#ifndef __SEQSTACK__
#define __SEQSTACK__
typedef struct stack
{
int *first;//栈的首地址
int maxlen;
int top;
}seqstack_t;
seqstack_t *createSeqstack(int);
int isfullseqstack(seqstack_t* p);
int isemptystack(seqstack_t *p);
int insertseqstack(seqstack_t *p,int data);
int outseqstack(seqstack_t *p);
void showseqstack(seqstack_t* p);
void clearstack(seqstack_t* p);
int breakstack(seqstack_t** p);
int lenstack(seqstack_t* p);
#endif
然后功能实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "seqstack.h"
seqstack_t *createSeqstack(int len)
{
seqstack_t *p=(seqstack_t*)malloc(sizeof(seqstack_t));
if(p==NULL)
{
puts("malloc申请失败");
return NULL;
}
p->first=(int*)malloc(sizeof(int)*len);
if(p->first==NULL)
{
puts("p->first malloc申请失败");
return NULL;
}
p->top=-1;
p->maxlen=len;
return p;
}
int isfullseqstack(seqstack_t* p)
{
return p->top==p->maxlen-1;
}
int insertseqstack(seqstack_t* p,int data)
{
if(isfullseqstack(p)==1)
{
printf("栈满");
return -1;
}
p->top++;
p->first[p->top]=data;
return 0;
}
int isemptystack(seqstack_t *p)
{
return p->top==-1;
}
int outseqstack(seqstack_t* p)
{
int temp;
if(isemptystack(p)==1)
{
printf("栈空");
return -999;
}
temp=p->first[p->top];
p->top--;
return temp;
}
void showseqstack(seqstack_t* p)
{
int temp;
temp=outseqstack(p);
printf("%d",temp);
}
void clearstack(seqstack_t* p)
{
while(p->top!=-1)
{
p->top--;
}
}
int breakstack(seqstack_t** p)
{
free((*p)->first);
free(*p);
*p=NULL;
return 0;
}
int lenstack(seqstack_t* p)
{
return p->top+1;
}
主函数(想要实现功能的话,只需要把‘//’去掉即可哦)
#include <stdio.h>
#include <stdlib.h>
#include "seqstack.h"
int main(int argc, char *argv[])
{
seqstack_t *p=createSeqstack(10);
//showseqstack(p);
//insertseqstack(p,1);
//insertseqstack(p,2);
//insertseqstack(p,3);
//showseqstack(p);
//breakstack(&p);
int a,c;
scanf("请输入原数:%d",&a);
while(a>0)
{
c=a%2;
a=a/2;
insertseqstack(p,c);
}
while(p->top!=-1)
{
showseqstack(p);
}
return 0;
}