数据结构二

来源:互联网 发布:央行4040mlf知乎 编辑:程序博客网 时间:2024/05/29 07:59
#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);   /*出栈并输出栈中元素*/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)    {        S->base=(ElemType *)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(ElemType));        if(S->base==NULL)            return 0;        S->top=S->base+S->stacksize;        S->stacksize=S->stacksize+STACKINCREMENT;    }    *S->top=e;    S->top++;    return 0;}/*Push*/int Pop(SqStack *S,ElemType *e){   if(S->top==S->base)    return 0;    else    {        S->top--;        *e=*S->top;        return 1;    }}/*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);}/*Pop_and_Print*/int main(){    SqStack ss;    printf("\n1-createStack\n");    CreateStack(&ss);    printf("\n2-Pop&Print\n");    PrintStack(&ss);    return 0;}       

 算法分析:输入元素序列1 2 3 4 5,为什么输出序列为5 4 3 2 1?体现了栈的什么特性?
先进后出

#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);   /*出栈并输出栈中元素*/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)    {        S->base=(ElemType *)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(ElemType));        if(S->base==NULL)            return 0;        S->top=S->base+S->stacksize;        S->stacksize=S->stacksize+STACKINCREMENT;    }    *S->top=e;    S->top++;    return 0;}/*Push*/int Pop(SqStack *S,ElemType *e){   if(S->top==S->base)    return 0;    else    {        S->top--;        *e=*S->top;        return 1;    }}/*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);}/*Pop_and_Print*/int IsEmpty(SqStack *S){    if(S->top==S->base)        return 1;    else        return 0;}void Conversion(int N){    SqStack S;    int x;    InitStack(&S);    while(N>0)    {        x=N%2;        Push(&S,x);        N/=2;    }    while(!IsEmpty(&S))    {        Pop(&S,&x);        printf("%d", x);    }}int main(){    SqStack ss;    int n;    scanf("%d",&n);    Conversion(n);    return 0;}

‘(‘match’)’!
‘(‘not match’)’!
判断括号是否匹配

原创粉丝点击