zoukankan      html  css  js  c++  java
  • 栈的基本操做

    stack.h

    #ifndef stack_h__
    #define stack_h__
    
    #include <stdio.h>
    #include <stdlib.h>
    
    enum boolean{FALSE, TRUE};
    typedef enum boolean Bool;
    typedef int ElementType;
    typedef struct stack_def{
        int top;
        ElementType * elements;
        int MaxSize;
    }Stack;
    void FreeStack(Stack* s);
    void MakeEmpty(Stack * s);
    Bool IsEmpty(Stack* s);
    Bool IsFull(Stack* s);
    Bool InitStack(Stack* s, int sz);
    Bool Push(Stack* s, ElementType x);
    ElementType*  Pop(Stack* s);
    Bool GetTop(Stack* s, ElementType* e);
    #endif // stack_h__

    stack.c

    #include "stack.h"
    
    void FreeStack(Stack* s){
        free(s->elements);
    }
    
    void MakeEmpty(Stack * s){
        s->top = -1;
    }
    
    Bool IsEmpty(Stack* s){
        return(Bool)(s->top==-1);
    }
    
    Bool IsFull(Stack* s){
        return (Bool)(s->top==s->MaxSize-1);
    }
    Bool InitStack(Stack* s, int sz){
        if (sz > 0){
            s->MaxSize = sz;
            s->top = -1;
            s->elements = (ElementType*)malloc(sizeof(ElementType)*sz);
            if (s->elements == NULL)
                puts("No Eniugh Memory.");
            else
                return TRUE;
        }
        else{
            puts("The stack size error.");
        }
        return FALSE;
    }
    
    Bool Push(Stack* s, ElementType x){
        if (!IsFull(s)){
            s->elements[++(s->top)] = x;
            return TRUE;
        }
        return FALSE;
    }
    
    ElementType*  Pop(Stack* s){
        if (!IsEmpty(s)){
            return s->elements + s->top--;
        }
        return NULL;
    }
    Bool GetTop(Stack* s, ElementType* e){
        if (!IsEmpty(s)){
            *e = s->elements[s->top];
            return TRUE;
        }
        return FALSE;
    }

    main.c

    #include "stack.h"
    
    int main(){
        /*main  主要测试栈的函数的使用*/
        Stack s;
        ElementType e;
        InitStack(&s, 5);
        if (IsEmpty(&s))
            puts("Empty!");
        else
            puts("Not Empty");
        Push(&s,1);
        Push(&s,2);
        Push(&s,3);
        Push(&s,4);
        Push(&s,5);
        if (Push(&s,6))
            puts("Push OK");
        else
            puts("Push Not OK");
    
        if (IsFull(&s))
            puts("Full");
        else
            puts("Not Full");
    
        GetTop(&s, &e);
        printf("%d
    ", e);
    
        Pop(&s);
        e = *Pop(&s);
        printf("%d
    ", e);
    
        Pop(&s);
        Pop(&s);
        Push(&s, 8);
        e = *Pop(&s);
        printf("%d
    ", e);
        e = *Pop(&s);
        printf("%d
    ", e);
    
        if (!Pop(&s))
            puts("empty");
        return 0;
    }

    运行图

  • 相关阅读:
    数据挖掘——统计学分析(五:统计量)
    数据挖掘——统计学分析(四:概率与概率分布)
    linux shell之sed
    ListView常用属性 (2012-01-12 17:20:27)
    android ListView几个比较特别的属性
    android
    android:layout_weight的真实含义
    linux下mysql安装、目录结构、配置
    mysql查看数据库和表的占用空间大小
    Android实战技巧:如何在ScrollView中嵌套ListView
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12538405.html
Copyright © 2011-2022 走看看