栈的实现(数组方式)
来源:互联网 发布:java中转义字符 编辑:程序博客网 时间:2024/06/05 11:21
array_stack.h
#ifndef __ARRAY_STACK_H__#define __ARRAY_STACK_H__#define ARRAY_STACK_LEN (10)#define EMPTY_STACK_INDEX (-1)typedef int ElementType;typedef struct _STACK_T{ int stack_size; // 栈的最大长度 int top_of_stack; // 栈顶所指向的index ElementType * array;}STACK;extern void array_stack_main_test(void);#endif
array_stack.c
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <stdbool.h>#include "array_stack.h"STACK * array_stack_init(void){ STACK * stack = (STACK *)malloc(sizeof(STACK)); if(!stack) { printf("malloc stack failed\n"); return NULL; } stack->array = (ElementType *)malloc(ARRAY_STACK_LEN * sizeof(ElementType)); if(!stack->array) { printf("malloc stack->array failed\n"); return NULL; } stack->stack_size = ARRAY_STACK_LEN; stack->top_of_stack = EMPTY_STACK_INDEX; return stack;}void array_stack_uninit(STACK * stack){ if(NULL != stack) { free(stack->array); free(stack); }}bool array_stack_is_empty(STACK * stack){ return stack->top_of_stack == EMPTY_STACK_INDEX;}void array_stack_make_empty(STACK * stack){ stack->top_of_stack = EMPTY_STACK_INDEX;}bool array_stack_is_full(STACK * stack){ return stack->top_of_stack == ARRAY_STACK_LEN-1;}void array_stack_push(STACK * stack, ElementType * value){ if(array_stack_is_full(stack)) { printf("The stack is full, cannot push element\n"); } else { //printf("insert value:%d len:%d\n", *value, stack->top_of_stack); memcpy(&stack->array[++stack->top_of_stack], value, sizeof(ElementType)); }}ElementType array_stack_top(STACK * stack){ if(array_stack_is_empty(stack)) { printf("The stack is empty\n"); return 0; } else { return stack->array[stack->top_of_stack]; }}void array_stack_pop(STACK * stack){ if(array_stack_is_empty(stack)) { printf("The stack is empty\n"); } else { stack->top_of_stack--; }}ElementType array_stack_top_and_pop(STACK * stack){ if(array_stack_is_empty(stack)) { printf("The stack is empty\n"); return 0; } else { return stack->array[stack->top_of_stack--]; }}int array_stack_traverse(STACK * stack){ int size = 0; size = stack->top_of_stack; //printf("size=%d\n", size+1); while(size >= 0) { printf("element=%d\n", stack->array[size]); size--; } return 0;}void array_stack_main_test(void){ int i = 0; STACK * stack = array_stack_init(); for(i=1; i<=10; i++) array_stack_push(stack, &i); array_stack_traverse(stack); array_stack_pop(stack); array_stack_pop(stack); array_stack_pop(stack); array_stack_traverse(stack);}
0 0
- 栈的实现(数组方式)
- 使用动态数组的方式实现栈
- Java的栈实现(数组、链表两种方式)
- CPP实现队列,(数组的方式)
- 队列的实现(数组方式)
- FIFO的数组实现方式
- java实现栈(数组方式)
- java实现栈(数组和链表两种实现方式)
- 栈的两种实现方式:数组和链表
- 队列(一)——队列的数组实现方式
- 两种实现二维数组的方式
- 二叉搜索树-数组的实现方式
- 约瑟夫环的数组实现方式
- 银行家算法的数组方式实现
- 使用指针的方式实现数组逆序
- 线性表的数组实现方式
- cpp 模拟栈(数组的方式)
- 基于数组和链表两种方式实现栈
- strspn()函数和strcspn()函数
- Linux 服务器搭建VPN(配置PPTP)
- java treeMap 已经排好序即输出{1=, 2=, 4=, 5=, 6=, 8=}
- Invert Binary Tree
- C - 开门人和关门人(结构体+sort)
- 栈的实现(数组方式)
- 正则表达式
- 微信、QQ这类IM App怎么做——谈谈Websocket
- 栈的实现(链表方式)
- D - EXCEL排序(sort+结构体)
- 栈的应用---平衡符号
- Swap Nodes in Pairs
- 10个团队管理励志小故事及感悟
- E - 稳定排序(sort+结构体)