标签:
#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