基于数组的堆栈实现
2014-04-22 13:00
363 查看
定义函数接口头文件“sa.h”
函数功能实现“sa.c”
测试用例“sa_test.c”
#ifndef _SA_H #define _SA_H #include <sys/types.h> /* 堆栈 */ typedef struct Stack { int* arr; /* 数组 */ size_t cap; /* 容量 */ size_t top; /* 栈顶 */ } STACK; /* 分配内存并初始化为空堆栈 */ void stack_init (STACK* stack, size_t cap); /* 释放内存并恢复到初始状态 */ void stack_deinit (STACK* stack); /* 判断是否满 */ int stack_full (STACK* stack); /* 判断是否空 */ int stack_empty (STACK* stack); /* 压入 */ void stack_push (STACK* stack, int data); /* 弹出 */ int stack_pop (STACK* stack); /* 栈顶 */ int stack_top (STACK* stack); /* 数量 */ size_t stack_size (STACK* stack); #endif /* _SA_H */
函数功能实现“sa.c”
/* 基于数组的堆栈 */ #include <stdlib.h> #include "sa.h" /* 分配内存并初始化为空堆栈 */ void stack_init (STACK* stack, size_t cap) { stack->arr = malloc (cap * sizeof (int)); stack->cap = cap; stack->top = 0; } /* 释放内存并恢复到初始状态 */ void stack_deinit (STACK* stack) { free (stack->arr); stack->arr = NULL; stack->cap = 0; stack->top = 0; } /* 判断是否满 */ int stack_full (STACK* stack) { return stack->top >= stack->cap; } /* 判断是否空 */ int stack_empty (STACK* stack) { return ! stack->top; } /* 压入 */ void stack_push (STACK* stack, int data) { stack->arr[stack->top++] = data; } /* 弹出 */ int stack_pop (STACK* stack) { return stack->arr[--stack->top]; } /* 栈顶 */ int stack_top (STACK* stack) { return stack->arr[stack->top - 1]; } /* 数量 */ size_t stack_size (STACK* stack) { return stack->top; }
测试用例“sa_test.c”
/* 基于数组的堆栈 */ #include <stdio.h> #include "sa.h" /* 测试用例 */ int main (void) { STACK stack; stack_init (&stack, 10); int i = 0; while (! stack_full (&stack)) stack_push (&stack, i++); while (! stack_empty (&stack)) printf ("%d\n", stack_pop (&stack)); stack_deinit (&stack); stack_init (&stack, 5); stack_push (&stack, (int)"ABC"); stack_push (&stack, (int)"DEF"); stack_push (&stack, (int)"GHI"); stack_push (&stack, (int)"JKL"); stack_push (&stack, (int)"MNO"); while (! stack_empty (&stack)) printf ("%s\n", (char const*)stack_pop (&stack)); stack_deinit (&stack); return 0; }
相关文章推荐
- 基于数组或链表的堆栈实现
- 基于数组或链表的堆栈实现
- PHP基于数组实现的堆栈和队列功能示例
- PHP基于数组实现的分页函数实例
- 基于数组对线性表的实现
- 巧用javascript数组实现数据结构-堆栈与队列
- 基于堆栈的计算器实现算法
- 集合基于数组的实现:ArrayBag.java
- 栈基于数组和链表的实现方式(java)
- Java实现基于数组的顺序栈
- Objective-C如何自己实现一个基于数组下标的属性访问模式
- 笔记六:基于数组的栈的实现
- 堆栈的基本操作(用数组实现)
- 基于链表的堆栈实现
- 简单栈的实现(基于数组)
- 堆栈的两种实现形式:数组和链表
- 用静态数组实现一个泛型的堆栈,数组的长度当堆栈实例化时作为参数给出
- js利用数组实现队列与堆栈效果
- 基于数组实现双向栈 c++
- 数组实现堆栈-压栈和弹栈