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;
    }
  • 相关阅读:
    华为软件开发云评测
    个人技术博客(α)
    结对第二次作业
    结对第一次作业----部门通
    数独设计
    2017软件工程实践第一次作业
    Alpha冲刺博客集
    个人作业——软件工程实践总结作业
    用户使用调查报告
    总结随笔(Beta)
  • 原文地址:https://www.cnblogs.com/noonjuan/p/11492024.html
Copyright © 2011-2022 走看看