动态数组实现堆栈
2010-08-13 13:41
281 查看
dy_stack.h
#define STACK_TYPE char
extern void push(STACK_TYPE value);
extern void pop(void);
extern STACK_TYPE top(void);
int is_empty();
int is_full();
extern void create_stack(int size);//unsigned int
extern void destroy_stack();
dy_stack.c
#include "dy_stack.h"
#include <assert.h>
#include <malloc.h>
#include <stdio.h>
//#define STACK_SIZE 100 /*堆栈中数值的最大限制*/
//存储堆栈中的数组和一个指向堆栈顶部元素的指针
//所有不属于外部接口的内容都被声明为static,这可防止用户使用
//预定义接口之外的任何方式访问堆栈的值
static int stack_size = 0;
static STACK_TYPE *stack;
static int top_element = -1;
void create_stack(int size)
{
assert(stack_size == 0);
stack_size = size;
stack = malloc(stack_size * sizeof(STACK_TYPE));
assert(stack != NULL);
}
void destroy_stack(void)
{
assert(stack_size > 0);
stack_size = 0;
free(stack);
stack = (STACK_TYPE *)NULL;
}
int is_empty()
{
assert(stack_size > 0);
return top_element == -1;
}
int is_full()
{
assert(stack_size > 0);
return top_element == stack_size - 1;
}
void push(STACK_TYPE value)
{
assert(!is_full());
top_element += 1;
stack[top_element] = value;
}
void pop()
{
assert(!is_empty());
top_element -= 1;
}
STACK_TYPE top()
{
assert(!is_empty());
return stack[top_element];
}
test.c
#include "dy_stack.h"
#include <stdio.h>
void main()
{
create_stack(100);
push('a');
push('b');
push('c');
push('d');
push('e');
pop();
pop();
printf("top = %c/n", top());
}
#define STACK_TYPE char
extern void push(STACK_TYPE value);
extern void pop(void);
extern STACK_TYPE top(void);
int is_empty();
int is_full();
extern void create_stack(int size);//unsigned int
extern void destroy_stack();
dy_stack.c
#include "dy_stack.h"
#include <assert.h>
#include <malloc.h>
#include <stdio.h>
//#define STACK_SIZE 100 /*堆栈中数值的最大限制*/
//存储堆栈中的数组和一个指向堆栈顶部元素的指针
//所有不属于外部接口的内容都被声明为static,这可防止用户使用
//预定义接口之外的任何方式访问堆栈的值
static int stack_size = 0;
static STACK_TYPE *stack;
static int top_element = -1;
void create_stack(int size)
{
assert(stack_size == 0);
stack_size = size;
stack = malloc(stack_size * sizeof(STACK_TYPE));
assert(stack != NULL);
}
void destroy_stack(void)
{
assert(stack_size > 0);
stack_size = 0;
free(stack);
stack = (STACK_TYPE *)NULL;
}
int is_empty()
{
assert(stack_size > 0);
return top_element == -1;
}
int is_full()
{
assert(stack_size > 0);
return top_element == stack_size - 1;
}
void push(STACK_TYPE value)
{
assert(!is_full());
top_element += 1;
stack[top_element] = value;
}
void pop()
{
assert(!is_empty());
top_element -= 1;
}
STACK_TYPE top()
{
assert(!is_empty());
return stack[top_element];
}
test.c
#include "dy_stack.h"
#include <stdio.h>
void main()
{
create_stack(100);
push('a');
push('b');
push('c');
push('d');
push('e');
pop();
pop();
printf("top = %c/n", top());
}
相关文章推荐
- 经典抽象数据类型之堆栈实现(动态数组)
- 数据结构学习---堆栈的动态数组实现及链表实现
- 数据结构学习---堆栈的动态数组实现及链表实现
- 动态数组实现的堆栈
- 数据结构与算法之动态数组实现堆栈
- 使用数组实现堆栈和队列
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- c++简单的动态数组实现
- 实现动态分配一维,二维,三维数组
- C++实现仿vector的动态数组
- 定义一个数组类(Array),要求动态分配大小,并在此基础上实现以下的两个子类:?反转类?排序类
- 动态数组实现循环队列
- mysql内核分析--innodb动态数组内部实现(上)
- 基于动态数组的列表实现
- c和c++分别实现动态分配二、三维数组
- js 数组_模拟堆栈实现——前进、撤销…
- 基于数组或链表的堆栈实现
- C++实现动态int数组
- 队列--基于动态循环数组实现(Java)