入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

C语言实现使用动态数组来构造栈结构

创建时间:2016-03-06 投稿人: 浏览次数:4176

       我在面前一篇博客《C语言实现使用静态数组来构造栈结构》中使用了静态数组来模拟栈的操作。静态数组的大小是在代码中写死的,是存储在用户栈上面的,使用起来不灵活。在这篇博客中我会使用动态数组来构造,此时使用的内存是动态申请的,只是在数组的创建和释放上面有差别,其他的使用都一样。注意:动态申请的内存需要我们手动去释放,因为这些占用的内存是在运行时堆上,不会在程序退出后释放。而存放在栈上面的会在程序退出后自动释放。代码上传至 https://github.com/chenyufeng1991/Stack_DynamicArray 。

(1)创建栈

//创建栈,也就是为数组分配数组
void createStack(int size){
    if (staticSize == 0) {
        staticSize = size;
        stack = (int *)malloc(staticSize * sizeof(int));
        if (stack == NULL) {
            printf("数组内存分配失败
");
        }
    }
}

(2)销毁栈

//销毁这个栈,重点是释放这个栈占用的内存
void destroyStack(){
    if (staticSize > 0) {
        staticSize = 0;
        free(stack);
        stack = NULL;//数组置空
        top_element = -1;//指针置空
    }
}

(3)其他基本操作

//压入元素
void push(int value){
    if (!isFull()) {
        stack[++top_element] = value;
    }
}

//弹出元素
void pop(){
    if (!isEmpty()) {
        top_element--;
    }
}

//取栈顶元素
int top(){
    if (!isEmpty()) {
        return stack[top_element];
    }

    return -32768;
}

//判空
int isEmpty(){
    return top_element == -1;
}

//判满
int isFull(){
    return top_element == staticSize - 1;
}

//从栈顶开始打印元素
void printStack(){

    int i = top_element;
    printf("打印出动态数组堆栈里面的值: ");
    if(i == -1){
        printf("这是个空栈");
    }else{
        while(i!= -1){
            printf("%d ",stack[i--]);
        }
    }
    printf("
");
}

(4)测试代码

int main(int argc, const char * argv[]) {

    createStack(50);
    printStack();

    push(6);push(3);push(9);push(1);push(4);
    printf("栈中压入数据后:
");
    printStack();
    pop();pop();

    printf("弹出数据后,栈内的元素为:
");
    printStack();

    printf("取栈顶的元素:%d
",top());

    destroyStack();
    printStack();

    return 0;
}


声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。