3.指针实现简单的栈操作

2020-02-26  本文已影响0人  陈忠俊
#include<stdio.h>
#include<stdlib.h>

#定义栈结构
typedef struct stack {
    int *data;
    int *pointer;
    int capacity;
}mystack;
#初始化栈
void init_stack(mystack *stack, int capacity){
    stack->data = (int *)malloc(capacity * sizeof(int));
    stack->pointer = stack->data;
    stack->capacity = capacity;
}
#释放分配的内存
void free_stack(mystack *stack){
    free(stack->data);
    stack->capacity = 0;
}
#栈是否是满的
int full_stack(mystack *stack){
    return stack->pointer - stack->data >= stack->capacity;
}
#栈是否是空
int empty_stack(mystack *stack){
    return stack->data - stack->pointer > 0;
}
#推入数据
void push_stack(mystack *stack, int data){
    if(!full_stack(stack))
        *(stack->pointer++) = data;
}
#弹出数据
int pop_stack(mystack *stack){
    if(!empty_stack(stack))
        return *(--stack->pointer);
}
#获取当前的容量
int getsize_stack(mystack *stack){
    if(!empty_stack(stack)){
        return stack->pointer - stack->data;
    }
}

int main(void){
    mystack stack;
    int capacity = 5;
    init_stack(&stack, capacity);
    int num = 100;
    int i;
    for(i = 0; i < capacity; i++){
        push_stack(&stack, num + i);
    }
    printf("%d\n", getsize_stack(&stack));
    for(i = 0; i < capacity; i++){
        printf("%d\n", pop_stack(&stack));
    }
    printf("%d\n", empty_stack(&stack));
    free_stack(&stack);
    return 0;
}

输出如下:

5
104
103
102
101
100
0
上一篇 下一篇

猜你喜欢

热点阅读