栈的基本应用_将字符串逆序输出

stack.h

#ifndef stack_h__
#define stack_h__

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

typedef enum boolean {FALSE, TRUE} BOOL;
typedef int ElementType;
typedef struct stack_def{
    ElementType* data;
    int top;
    int sz;
}stack;
void initStack(stack* s, int sz);
BOOL isEmpty(stack s);
BOOL isFull(stack s);
void Pop(stack *s);
void Push(stack* s, ElementType e);
ElementType getTop(stack s);
#endif // stack_h__

stack.c

#include "stack.h"

void initStack(stack* s, int sz){
    if (sz < 0){
        puts("error:sz < 0");
        exit(1);
    }
    s->sz = sz;
    s->data = (ElementType*)malloc(sizeof(ElementType)*s->sz);
    s->top = -1;
}

BOOL isEmpty(stack s){
    return (BOOL)(s.top==-1);
}

BOOL isFull(stack s){
    return (BOOL)(s.top == s.sz);
}


void Pop(stack *s){
    if (isEmpty(*s)){
        puts("error: Pop stack is empty.");
        exit(1);
    }
    s->top--;
}

void Push(stack* s, ElementType e){
    if (isFull(*s)){
        puts("error: Push stack is Full.");
        exit(1);
    }
    s->data[++s->top] = e;
}

ElementType getTop(stack s){
    if (isEmpty(s)){
        puts("error: getTop stack is  empty.");
        exit(1);
    }
    return s.data[s.top];
}

main.c

#define MAX_LEN 20
#include "stack.h"

int main(){
    char str[MAX_LEN];
    stack s;
    int i;
    printf("输入一个字符串:");
    gets(str);
    initStack(&s, MAX_LEN);
    for (i=0; str[i]; i++){
        Push(&s, str[i]);
    }
    puts("Result:");
    while (!isEmpty(s)){
        putchar(getTop(s));
        Pop(&s);
    }
    printf("\n");
    return 0;
}

运行结果:
这里写图片描述

posted @ 2016-09-19 08:08  老耗子  阅读(1214)  评论(0编辑  收藏  举报