顺序栈的表示和实现
来源:互联网 发布:乔纳森西蒙斯魔术数据 编辑:程序博客网 时间:2024/05/07 19:17
// 2014年4月16日// 顺序栈的表示和实现// tag_stack_t 的数据格式//// size 栈的大小// [data]// top -> [data] 栈顶// [data] 第一个节点// [data]// base -> [data] 栈底#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>#include <time.h>typedef int element_t;typedef struct tag_stack_t{ size_t size; element_t *top; element_t *base;} *stack_t;// 初始化一个只有一个节点的栈// 符合栈已满的判断条件,这是一个满了的栈void stack_init(stack_t& stack){ stack = (stack_t)malloc(sizeof(tag_stack_t)); stack->base = (element_t *)malloc(sizeof(element_t)); stack->top = stack->base; stack->size = 1;}void stack_destroy(stack_t& stack){ free(stack->base); free(stack); stack = 0;}bool stack_is_empty(stack_t& stack){ return stack->top == stack->base;}bool stack_is_full(stack_t& stack){ return stack->top == stack->base + stack->size;}void stack_push(stack_t& stack, element_t e){ if (stack_is_full(stack)) { // 栈已满,大小增长一倍 size_t size = stack->size << 1; stack->base = (element_t *)realloc(stack->base, size * sizeof(element_t)); stack->top = stack->base + stack->size; stack->size = size; } // 栈顶指针指向的位置是空的,先放进去,再更新栈顶指针 *stack->top = e; ++stack->top;}bool stack_pop(stack_t& stack, element_t& e){ if (stack_is_empty(stack)) { return false; } // 栈顶指针指向的位置是空的,先更新栈顶指针,再取出数据 --stack->top; e = *stack->top; return true;}void print(stack_t& stack){ for (element_t *p = stack->top - 1; p >= stack->base; --p) { printf("%02d ", *p); } printf("\n");}int range(int a, int b){ return rand()%b + a;}int main(){ int n = 10; int size = 20; srand((unsigned)time(0)); while (n--) { stack_t stack; stack_init(stack); // 随机入栈 int a = range(1, size); while (a--) { int i = range(1, 10); stack_push(stack, i); print(stack); } // 随机出栈 int b = range(1, size); while (b--) { int i = range(1, 10); if (!stack_pop(stack, i)) { break; } print(stack); } stack_destroy(stack); } return 0;}
0 0
- 顺序栈的表示和实现
- 顺序栈的表示和实现
- 栈的顺序表示和实现
- 栈的顺序表示和实现
- 栈的顺序表示和实现
- 栈的顺序表示和实现(数据结构)
- 栈的顺序表示和实现
- 栈的顺序表示和实现
- 栈的顺序表示和实现
- 顺序栈的表示和实现
- 顺序栈的表示和实现
- 重温数据结构:栈的顺序表示和实现与栈的链式表示和实现
- 2007.08.27栈的表示和实现之顺序栈
- 数据结构(3):顺序栈的表示和实现
- c语言顺序栈的表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- JNI层 C如何掉用java接口
- 用UIAutomation识别UI元素(四)
- 匹配汉字英文字符
- 用matlab绘制三维图
- 今天没有课,大家不好意思啦
- 顺序栈的表示和实现
- trie树
- 关于JAVA的getter和setter问题
- java 操作 docx 强大的docx4j
- 获取JVM字符集
- ios安全攻防(二)后台daemon非法窃取用户iTunesstore信息
- POJ 1724 ROADS
- 梦想这东西和经典一样,永远不会因为时间而褪色,反而更显珍贵。
- 黑马程序员_学习笔记第3天——for、while、函数