数据结构(二) -- 栈 数组实现
2016-07-16 17:25
423 查看
栈的描述
栈是一种后进先出(LIFO)的数据结构,先入栈的元素只能在最后出栈,在实际生活中就像摆放盘子一样,最后放的一个可以最先拿走。栈接口定义
int initStack(stackT *stack, int size); /* 初始化栈,大小为size*/ void destoryStack(stackT *stack); /* 销毁栈 */ int stackIsEmpty(stackT *stack); /* 栈是否为空 */ int stackPush(stackT *stack, stackElementT element); /* 入栈 */ int stackPop(stackT *stack, stackElementT *element); /* 出栈 */
栈实现
<stack.h>#ifndef __STACK_H__
#define __STACK_H__
typedef int stackElementT;
typedef struct stack {
int top;
int size;
stackElementT *contents;
}stackT;
int initStack(stackT *stack, int size); /* 初始化栈,大小为size*/ void destoryStack(stackT *stack); /* 销毁栈 */ int stackIsEmpty(stackT *stack); /* 栈是否为空 */ int stackPush(stackT *stack, stackElementT element); /* 入栈 */ int stackPop(stackT *stack, stackElementT *element); /* 出栈 */
#endif
<stack.c>
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "stack.h" int initStack(stackT *stack, int size) { stack->contents = (stackElementT *)malloc(sizeof(stackElementT) * size); if(NULL == stack->contents) { perror("malloc"); return -1; } stack->top = -1; stack->size = size; return 0; } void destoryStack(stackT *stack) { free(stack->contents); stack->contents = NULL; } int stackIsEmpty(stackT *stack) { if(-1 == stack->top) { return 1; } else { return 0; } } int stackPush(stackT *stack, stackElementT element) { if(stack->top == stack->size - 1) { printf("stack is full.\n"); return -1; } stack->top++; stack->contents[stack->top] = element; return 0; } int stackPop(stackT *stack, stackElementT *element) { if(stackIsEmpty(stack)) { printf("stack is empty.\n"); return -1; } *element = stack->contents[stack->top]; stack->top--; return 0; }
github地址(含Makefile和测试代码)
https://github.com/zsirkg/myWorks/tree/master/algorithms_and_data_structures/stack/array
相关文章推荐
- Linux C函数参考手册(PDF版)
- 交换机升级排障实例
- C#数据结构之顺序表(SeqList)实例详解
- C# partial关键字说明
- Lua教程(十七):C API简介
- 简单谈谈lua和c的交互
- Lua教程(七):数据结构详解
- C#用链式方法表达循环嵌套
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- C#中的委托数据类型简介
- C#编写的艺术字类实例代码
- C#实现打造气泡屏幕保护效果
- 基于C#技术实现身份证识别功能
- 举例讲解C#编程中委托的实例化使用
- 使用C#代码获取存储过程返回值
- sql2008启动代理未将对象应用到实例解决方案