• 堆栈的链表实现


    链表是带头结点的. 每次执行入栈操作, 都是把数据压入第1个节点.

    完整代码如下:

    #include <stdio.h>
    
    #define true 1;
    #define false 0;
    typedef int elementType;
    
    struct s_stack {
        elementType data;
        struct s_stack* next;
    };
    
    typedef struct s_stack stack;
    typedef struct s_stack* ptr_stack;
    
    // 函数声明
    ptr_stack createStack ();
    void push (ptr_stack ptr, elementType x);
    void print (ptr_stack ptr);
    elementType pop (ptr_stack ptr);
    
    int main () {
        int i;
        ptr_stack stackHead;
        stackHead = createStack();
        /* 入栈测试开始 */
        for (i=1; i<100; i+=8) {
            push(stackHead, i);
        }
        print(stackHead);
        /* 入栈测试结束 */
    
        /* 出栈测试开始 */
        // stackHead = createStack();
        elementType popValue = pop(stackHead);
        printf("被弹出的元素的值是: %d
    ", popValue);
        print(stackHead);
        /* 出栈测试结束 */
    
        return 0;
    }
    
    // 创建空栈
    ptr_stack createStack () {
        ptr_stack ptr;
        ptr = (stack*)malloc(sizeof(stack));
        ptr->next = NULL;
        return ptr;
    }
    
    // 入栈
    void push (ptr_stack ptr, elementType x) {
        ptr_stack curNode; // 存放当前节点
        curNode = (stack*)malloc(sizeof(stack));
        curNode->data = x;
    
        curNode->next = ptr->next;
        ptr->next = curNode;
    }
    
    // 打印
    void print (ptr_stack ptr) {
        int length = 0; // 堆栈链表长度
        ptr = ptr->next;
        printf("堆栈链表的数据如下
    ");
        while (ptr != NULL) {
            printf("%d	", ptr->data);
            length += 1;
            ptr = ptr->next;
        }
        printf("
    ");
        printf("堆栈链表的长度是: %d
    ", length);
        printf("
    ");
    }
    
    // 出栈
    // 如果栈空返回 false
    // 返回被pop的元素的值, 并把该元素从栈中移除
     elementType pop (ptr_stack ptr) {
        if (ptr->next == NULL) {
            printf("栈空不能出栈
    ");
            return false;
        }
    
        ptr_stack curNode; // 指向弹出元素
        int curValue; // 保存弹出元素的值
    
        curNode = ptr->next;
        ptr->next = ptr->next->next;
        curValue = curNode->data;
        free(curNode);
    
        return curValue;
    }
    
    
  • 相关阅读:
    Linux(Centos7)yum安装最新redis
    refresh table tablename ;MSCK REPAIR TABLE table_name;
    整个shuffle的流程图
    Vim简明教程
    centos vim 7.3 升级 + vim 简单配置文件
    Python——可变类型与不可变类型(即为什么函数默认参数要用元组而非列表)
    python——修饰符
    转——《将人性置之死地而后生》刘夙
    各学科领域入门书籍推荐
    python——关于Python Profilers性能分析器
  • 原文地址:https://www.cnblogs.com/asheng2016/p/7608488.html
Copyright © 2020-2023  润新知