zoukankan      html  css  js  c++  java
  • 代码模版

    /*************************************************************************
            > File Name: stack.h
            > Author: zhoulin
            > Mail: 715169549@qq.com
            > Created Time: Tue Mar 29 11:50:33 2016
     ************************************************************************/
    
    #ifndef _STACK_H
    #define _STACK_H
    #include <stddef.h>
    typedef unsigned char bool;
    #define true 1
    #define false 0
    //define a element of stack
    typedef struct _SElemType{
        unsigned char f:1;
        void *data;
        struct _SElemType *next;
    }SElemType;
    
    //define a Stack
    typedef struct _Stack
    {
        int size;
        int free;
        struct _SElemType *top;
        struct _SElemType *bottom;
    }Stack;
    
    //init opertion
    #define ResetStack(S)      
    {                          
        S->size = S->free = 0; 
        S->top = NULL;         
        S->bottom = NULL;      
    }
    
    #define ResetSElemType(E)  
    {                          
        E->f = 0;              
        E->data = NULL;        
        E->next = NULL;        
    }
    //init a Stack 
    Stack *InitStack();
    
    //destroy a Stack and free all memeory
    void DestroyStack(Stack *s);
    
    //clear all stack and reset all f
    void ClearStack(Stack *s);
    
    //judge a stack of size is equeal zero
    bool StackEmpty(Stack *s);
    
    //get a length of stack
    int StackLength(Stack *s);
    
    //push a data into stack
    int StackPush(Stack *s,void *data,size_t n);
    
    //pop a data out of stack
    int StackPop(Stack *s);
    
    //get top element of stack 
    SElemType *StackTop(Stack *s);
    
    //get bottom element of stack 
    SElemType *StackBottom(Stack *s);
    #endif
    /*************************************************************************
            > File Name: stack.c
            > Author: zhoulin
            > Mail: 715169549@qq.com
            > Created Time: Tue Mar 29 12:16:16 2016
     ************************************************************************/
    
    #include "stack.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <stddef.h>
    Stack *InitStack()
    {
        Stack *s = NULL;
        if((s = (Stack *)malloc(sizeof(*s))) == NULL)
        {
            return NULL;
        }
        ResetStack(s);
        return s;
    }
    void DestroyStack(Stack *s)
    {
        if(s != NULL && s->size > 0)
        {
            SElemType *cur = s->top;
            while(cur != NULL)
            {
                SElemType *ncur = cur->next;
                free(cur->data);
                cur = ncur;
            }
            free(s);
            s = NULL;
        }
    }
    bool StackEmpty(Stack *s)
    {
        if(s != NULL && s->size > 0)
        {
            return true;
        }
        return false;
    }
    int StackLength(Stack *s)
    {
        if(s != NULL){
            return s->size;
        }
        return -1;
    }
    int StackPush(Stack *s,void *data,size_t n)
    {
        if(s != NULL)
        {
            SElemType *cur =(SElemType *)malloc(sizeof(SElemType));
            ResetSElemType(cur);
            cur->data = (char *)malloc(n);
            bzero(cur->data,n);
            if(cur == NULL || cur->data == NULL)
            {
                free(cur);
                free(cur->data);
                cur = cur->data = NULL;
                return -1;
            }
            cur->f = 1;
            memcpy(cur->data,data,n);
            if(s->size == 0)
            {
                s->top = s->bottom = cur;
                s->size++;
                return 0;
            }
            s->bottom->next = cur;
            s->bottom = cur;
            s->size++;
            return 0;
        }
        return -1;
    }
    int StackPop(Stack *s)
    {
        if(s != NULL && s->size > 0)
        {
            SElemType *bottom = s->bottom;
            SElemType *cur = s->top;
            SElemType *tmp = NULL;
            while(cur != NULL)
            {
                SElemType *ncur = cur->next;
                if(ncur != NULL && ncur == bottom)
                {
                    tmp = ncur;
                    break;
                }
            }
            if(tmp == NULL)
            {
                return -1;
            }
            free(cur->data);
            free(cur);
            cur->next = cur->data = NULL;
            tmp->next = NULL;
            s->bottom = tmp;
            s->size--;
            if(s->size == 1)
            {
                s->top =s->bottom;
            }
            return 0;
        }
        return -1;
    }
    SElemType *StackTop(Stack *s)
    {
        if(s == NULL || s->size == 0)
        {
            return NULL;
        }
        return s->top;
    }
    SElemType *StackBottom(Stack *s)
    {
        if(s == NULL || s->size == 0)
        {
            return NULL;
        }
        return s->bottom;
    }
    static void StackPrt(Stack *s)
    {
        if(s != NULL && s->size > 0)
        {
            SElemType *cur = s->top;
            fprintf(stdout,"top=%p,bottom =%p
    ",s->top,s->bottom);
            while(cur != NULL)
            {
                fprintf(stdout," cur = %p,next =%p,f=%d,data=%p
    ",cur,cur->next,cur->f,cur->data);
                cur = cur->next;
            }
        }
    }
    int main(void)
    {
        Stack *s = InitStack();
        char *s1 = "abc";
        int s2 =100;
        int s3 =99;
        char *s4 = "hello";
        fprintf(stdout,"StackPush(%s,%d) =%d
    ",s1,strlen(s1)+1,StackPush(s,s1,strlen(s1)+1));
        fprintf(stdout,"StackPush(%d,%d) =%d
    ",s2,sizeof(int),StackPush(s,&s2,sizeof(int)));
        fprintf(stdout,"StackPush(%s,%d) =%d
    ",s4,strlen(s4)+1,StackPush(s,s4,strlen(s4)+1));
        fprintf(stdout,"StackPush(%d,%d) =%d
    ",s3,sizeof(int),StackPush(s,&s3,sizeof(int)));
        StackPrt(s);
        DestroyStack(s);
        return 0;
    }
  • 相关阅读:
    AGC012
    AGC010
    AGC010
    AGC010
    AGC010
    BZOJ2120
    python_way,day8 面向对象【多态、成员--字段 方法 属性、成员修饰符、特殊成员、异常处理、设计模式之单例模式、模块:isinstance、issubclass】
    python_way ,day7 面向对象 (初级篇)
    python_way.day7 模块(configparser,xml,shutil,subprocess)、面向对象(上)(创建类,类的构成,函数式编程与面向对象编程的选择,类的继承)
    python_way ,day5 模块,模块3 ,双层装饰器,字符串格式化,生成器,递归,模块倒入,第三方模块倒入,序列化反序列化,日志处理
  • 原文地址:https://www.cnblogs.com/innobase/p/5333402.html
Copyright © 2011-2022 走看看