四、线性栈

来源:互联网 发布:linux端口占用查看命令 编辑:程序博客网 时间:2024/06/09 23:52

    • 序言
      • 栈的结构图如下
      • 栈的结构
      • 栈的基本操作
      • 实现

序言

线性栈是使用线性结构数组直线的栈.

栈的结构图如下

栈的结构.

#define MAX_STACK_ARRAY_SIZE  15typedef struct STACK_ARRAY {    ELEMENT *stack;    int top;    int size;} *PSTACK_ARRAY, STACK_ARRAY;

栈的基本操作

void init_stack_array(PSTACK_ARRAY *pstack_array);void push_stack_array(PSTACK_ARRAY pstack_array, ELEMENT *data);void pop_stack_array(PSTACK_ARRAY pstack_array, ELEMENT *data);bool is_empty_stack_array(PSTACK_ARRAY pstack_array);bool is_full_stack_array(PSTACK_ARRAY pstack_array);void print_stack_array(PSTACK_ARRAY pstack_array);void destroy_stack_array(PSTACK_ARRAY *pstack_array);

实现

void init_stack_array(PSTACK_ARRAY *pstack_array) {    *pstack_array = malloc(sizeof(STACK_ARRAY));    if ((*pstack_array) == NULL) {        exit(OVERFLOW);    }    (*pstack_array)->stack = malloc(sizeof(ELEMENT) * MAX_STACK_ARRAY_SIZE);    (*pstack_array)->top = -1;    (*pstack_array)->size = MAX_STACK_ARRAY_SIZE;};void push_stack_array(PSTACK_ARRAY pstack_array, ELEMENT *data) {    if (is_full_stack_array(pstack_array)) {        printf("array stack is full");        return;    }    pstack_array->top++;    pstack_array->stack[pstack_array->top] = *data;};void pop_stack_array(PSTACK_ARRAY pstack_array, ELEMENT *data) {    if (is_empty_stack_array(pstack_array)) {        printf("array stack is empty");        return;    }    *data = pstack_array->stack[pstack_array->top];    pstack_array->top--;};bool is_empty_stack_array(PSTACK_ARRAY pstack_array) {    if (pstack_array->top == -1) {        return true;    }    return false;};bool is_full_stack_array(PSTACK_ARRAY pstack_array) {    return pstack_array->top == MAX_STACK_ARRAY_SIZE;};void print_stack_array(PSTACK_ARRAY pstack_array) {    while (!is_empty_stack_array(pstack_array)) {        int a;        pop_stack_array(pstack_array, &a);        printf("%d\n", a);    }};void destroy_stack_array(PSTACK_ARRAY *pstack_array) {    free((*pstack_array));    free(((*pstack_array)->stack));    printf("has been destroyed stack array");}

github:https://github.com/HumorSmith/DataStructure/tree/master/stack