zoukankan      html  css  js  c++  java
  • 数据结构——链栈(link stack)

    /* linkStack.c */
    /* 链栈 */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <stdbool.h>
    
    /* 链栈数据结构 */
    /*
        ————————————————
        | value | next |   <--- top
        ————————————————
                    ↓
        ————————————————
        | value | next |
        ————————————————
                    ↓
        ————————————————
        | value | next |
        ————————————————
    */
    typedef struct node {
        int data;
        struct node *next;
    } StackNode;
    
    void interface(void);
    /* 链栈函数声明 */
    StackNode *initializeLinkStack();
    bool isEmptyLinkStack(StackNode*);
    StackNode *pushLinkStack(StackNode*, int);
    StackNode *popLinkStack(StackNode*);
    
    /* 程序主函数入口 */
    int main(){
        StackNode *top = initializeLinkStack();
        int flag, num;
    
        interface();
        for(;;){
            printf("Command: ");
            scanf("%d", &num);
            switch(num){
                case 0: puts("Bye!"); return 0; break;
                case 1:
                    printf("Enter number: ");
                    scanf("%d", &num);
                    top = pushLinkStack(top, num);
                    break;
                case 2:
                    if(isEmptyLinkStack(top))
                        printf("Link stack is empty!
    ");
                    else
                        top = popLinkStack(top);
                    break;
            }
        }
    
        return 0;
    }
    
    /* 用户界面 */
    void interface(void){
        puts("+******************************+");
        puts("+  0, quit      退出           +");
        puts("+  1, push      压入           +");
        puts("+  2, pop       弹出           +");
        puts("+******************************+");
    }
    /* 链栈函数实现 */
    /* 初始化链栈 */
    StackNode *initializeLinkStack(){
        StackNode *top = (StackNode*)malloc(sizeof(StackNode));
        top = NULL;
        return top;
    }
    /* 链栈是否为空 */
    bool isEmptyLinkStack(StackNode* top){
        if(top==NULL)
            return true;
        else
            return false;
    }
    /* 入栈 */
    StackNode *pushLinkStack(StackNode *top, int number){
        StackNode *s = (StackNode*)malloc(sizeof(StackNode));
        s->data = number;
        s->next = top;
        top = s;
        return top;
    }
    /* 出栈 */
    StackNode *popLinkStack(StackNode *top){
        int i = top->data;
        StackNode *p = top;
        top = top->next;
        free(p);
        printf("Pop: %d
    ", i);
        return top;
    }
  • 相关阅读:
    JavaScript (new)创建一个对象的过程
    我所理解的promise的then方法
    promise与async和await的区别
    JS Promise实例 then()方法
    电脑上不去网
    es6----set map应用场景
    ES6新特性一览
    es6继承
    es6中class类的全方面理解(一)
    时间处理金字教程
  • 原文地址:https://www.cnblogs.com/noonjuan/p/11492024.html
Copyright © 2011-2022 走看看