#include<stdio.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
#define STACK_INT_SIZE 10 /*存储空间初始分配量*/
#define STACKINCREMENT 5 /*存储空间分配增量*/
typedef int ElemType; /*定义元素的类型*/
typedef struct{
ElemType *base;
ElemType *top;
int stacksize; /*当前已分配的存储空间*/
}SqStack;
int InitStack(SqStack *S); /*构造空栈*/
int Push(SqStack *S,ElemType e); /*入栈*/
int Pop(SqStack *S,ElemType *e); /*出栈*/
int CreateStack(SqStack *S); /*创建栈*/
void PrintStack(SqStack *S); /*出栈并输出栈中元素*/
void Transformation(ElemType num,SqStack *S);//把一个10进制数转化为2进制
void Maketentotwo()
{
ElemType num;
SqStack st;
printf("Enter a number we can make it from 10 to 2:\n");
getchar();
scanf("%d",&num);
InitStack(&st);
Transformation(num,&st);
PrintStack(&st);
}
void Transformation(ElemType num,SqStack *S)
{
ElemType k;
while(num)
{
k=num%2;
Push(S,k);
num/=2;
}
}
int InitStack(SqStack *S){
S->base=(ElemType *)malloc(STACK_INT_SIZE *sizeof(ElemType));
if(!S->base) return ERROR;
S->top=S->base;
S->stacksize=STACK_INT_SIZE;
return OK;
}/*InitStack*/
int Push(SqStack *S,ElemType e){
if(S->top-S->base==S->stacksize)
{
int i=S->stacksize-1;
ElemType *pt;
pt=(ElemType *)malloc(2*S->stacksize*sizeof(ElemType));
while(i>=0)
{
*(pt+i)=*(S->base+i);
i--;
}
free(S->base);
S->base=pt;
S->top=pt+S->stacksize;
S->stacksize*=2;
}
*(S->top)=e;
S->top++;
return OK;
}/*Push*/
int Pop(SqStack *S,ElemType *e){
if(S->top>S->base)
{
S->top--;
*e=*(S->top);
return OK;
}
else
{
free(S->base);
return ERROR;
}
}/*Pop*/
int CreateStack(SqStack *S){
int e;
if(InitStack(S))
printf("Init Success!\n");
else{
printf("Init Fail!\n");
return ERROR;
}
printf("input data:(Terminated by inputing a character)\n");
while(scanf("%d",&e))
Push(S,e);
return OK;
}/*CreateStack*/
void PrintStack(SqStack *S){
ElemType e;
while(Pop(S,&e))
printf("%3d",e);
printf("\n");
}/*Pop_and_Print*/
int main(){
SqStack ss;
printf("\n1-createStack\n");
CreateStack(&ss);
printf("\n2-Pop&Print\n");
PrintStack(&ss);
Maketentotwo();
return 0;
}
构建链式栈
最新推荐文章于 2022-11-07 23:08:14 发布