构建链式栈

来源:互联网 发布:淘宝里i7主机2千多 编辑:程序博客网 时间:2024/05/29 07:40
#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;}   

0 0