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


           我在面前一篇博客《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;
    }


  • 相关阅读:
    Linux 小知识翻译
    Linux 小知识翻译
    Linux 小知识翻译
    Linux 小知识翻译
    Linux 小知识翻译
    Linux 小知识翻译
    Linux 小知识翻译
    Linux 小知识翻译
    Linux 小知识翻译
    Linux 小知识翻译
  • 原文地址:https://www.cnblogs.com/llguanli/p/7298604.html
Copyright © 2020-2023  润新知