码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构_栈

时间:2015-10-15 21:56:55      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:

#ifndef __STACK_BASE_ARRAY_H__  
#define __STACK_BASE_ARRAY_H__

typedef struct _stack
{
    int *arr; //存储栈数据
    int cap ; //栈容量
    int top; //栈顶
}STACK;

/*创建栈*/
STACK *stack_create(int cap);
/*销毁栈*/
void stack_destroy(STACK *stack);
/*压栈*/
void stack_push(STACK *stack, int data);
/*弹栈*/
int stack_pop(STACK *stack);
/*判空*/
int stack_empty(STACK *stack);
/*判满*/
int stack_full(STACK *stack);

#endif
#include "stack_base_array.h"
#include <stdio.h>
#include <stdlib.h>

/*创建栈*/
STACK *stack_create(int cap)
{
    STACK *stack = malloc(sizeof(STACK));
    stack->arr = malloc(cap * sizeof(int));
    stack->cap = cap;
    stack->top = 0;
    return stack;
}
/*销毁栈*/
void stack_destroy(STACK *stack)
{
    free(stack->arr);
    stack->arr = NULL;//防止野指针
    free(stack);
    stack = NULL; //防止野指针
}
/*压栈*/
void stack_push(STACK *stack, int data)
{
    stack->arr[stack->top] = data;
    stack->top++;
}
/*弹栈*/
int stack_pop(STACK *stack)
{
    return stack->arr[--(stack->top)];
}
/*判空 如果为空返回1, 否则返回0*/
int stack_empty(STACK *stack)
{
    return !stack->top;
}
/*判满,如果满返回1 ,否则返回0*/
int stack_full(STACK *stack)
{
    if(stack->top == stack->cap)
    {    
        return 1;
    }
    return 0;
}
#include <stdio.h>
#include "stack_base_array.h"

int main()
{
    STACK *stack = stack_create(10);
    
    int i = 1;
    /*栈不满*/
    while(!stack_full(stack))
    {
        /*压栈*/
        stack_push(stack, i++);
    }
    /*栈非空*/
    while(!stack_empty(stack))
    {
        printf("%d\n", stack_pop(stack));
    }
    stack_destroy(stack);
    return 0;
}
#ifndef __STACK_BASE_LIST_H__
#define __STACK_BASE_LIST_H__

/*代表栈中的节点*/
typedef struct StackNode
{
    int data;//有效数据
    struct StackNode *next;//指向下一个节点
}STACK_NODE;
/*代表栈结构*/
typedef struct Stack
{
   STACK_NODE   *top;
}STACK;

/*创建节点*/
STACK_NODE *node_create(int data,STACK_NODE *next);
/*销毁节点*/
STACK_NODE *node_destroy(STACK_NODE *node);
/*创建栈*/
STACK *stack_create(void);
/*销毁栈*/
void stack_destroy(STACK *stack);
/*压栈*/
void stack_push(STACK *stack, int data);
/*弹栈*/
int stack_pop(STACK *stack);
/*判空*/
int stack_empty(STACK *stack);
/*判满*/
int stack_full(STACK *stack);






#endif
#include "stack_base_list.h"
#include <stdio.h>
#include <stdlib.h>

/*创建节点*/
STACK_NODE *node_create(int data,STACK_NODE *next)
{
    STACK_NODE *node = malloc(sizeof(STACK_NODE));
    node->data = data;
    node->next = next;
    return node;
}
/*销毁节点*/
STACK_NODE * node_destroy(STACK_NODE *node)
{    
    STACK_NODE *next = node->next;
    free(node);
    return next;
}
/*创建栈*/
STACK *stack_create(void)
{
    STACK *stack = malloc(sizeof(STACK));
    stack->top = NULL;
    return stack;
}
void stack_clear(STACK *stack)
{
    while(stack->top)
    {
        stack->top = node_destroy(stack->top);
    }
}

/*销毁栈*/
void stack_destroy(STACK *stack)
{
    /*清空栈*/
    stack_clear(stack);
    free(stack);// ?????
}
/*压栈*/
void stack_push(STACK *stack, int data)
{
    /*
    * 1 申请节点并初始化,让该节点的next指向老的栈顶
    * 2 top指针指向新的栈顶
     */
    stack->top = node_create(data, stack->top);
}
/*弹栈*/
int stack_pop(STACK *stack)
{
    int data = stack->top->data;
    stack->top = node_destroy(stack->top);
    return data;
}
/*判空 如果为空返回1 ,否则返回0*/
int stack_empty(STACK *stack)
{
    return !stack->top;
}
/*判满*/
int stack_full(STACK *stack)
{
    return 0;
}

 

数据结构_栈

标签:

原文地址:http://www.cnblogs.com/Neo-Lc/p/4883754.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!