• 数据结构——顺序栈(sequence stack)


    /* sequenceStack.c */
    /* 栈 先进后出(First In Last Out,FILO)*/
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <stdbool.h>
    
    #define MAXSIZE 100
    
    /* 栈数据结构 */
    /*
        ——————————
        | data[2] |   <--- top
        ———————————
            |
        ——————————
        | data[1] |
        ———————————
            |
        ——————————
        | data[0] |
        ———————————
    */
    typedef struct {
        int data[MAXSIZE];    /* 数组 */
        int top;            /* 栈指针 0表示栈底,-1表示空栈 */
    } SeqStack;
    
    /* 栈函数声明 */
    void interface(void);
    SeqStack *initializeSeqStack();
    bool isEmptySeqStack(SeqStack*);
    int pushSeqStack(SeqStack*, int);
    int popSeqStack(SeqStack*);
    int peekSeqStack(SeqStack*);
    
    /* 程序主函数入口 */
    int main(){
        SeqStack *s = initializeSeqStack();
        int flag, number;
    
        interface();
        for(;;){
            printf("Command: ");
            scanf("%d", &flag);
            switch(flag){
                case 0: return 0; break;
                case 1:
                    printf("Enter number: ");
                    scanf("%d", &number);
                    pushSeqStack(s, number);
                    break;
                case 2:
                    if(isEmptySeqStack(s))
                        printf("SeqStack is empty!
    ");
                    else
                        printf("value: %d
    ", popSeqStack(s));
                    break;
                case 3:
                    if(isEmptySeqStack(s))
                        printf("SeqStack is empty!
    ");
                    else
                        printf("value: %d
    ", peekSeqStack(s));
                    break;
            }
        }
    
        return 0;
    }
    
    /* 用户界面 */
    void interface(void){
        puts("+*********************************+");
        puts("+  0, quit    退出                +");
        puts("+  1, push    压入                +");
        puts("+  2, pop     弹出                +");
        puts("+  3, peek    查看                +");
        puts("+*********************************+");
    }
    
    /* 栈函数实现 */
    /* 初始化栈 */
    SeqStack *initializeSeqStack(){
        SeqStack *s = (SeqStack*)malloc(sizeof(SeqStack));
        s->top = -1;
        return s;
    }
    /* 判断栈是否为空 */
    bool isEmptySeqStack(SeqStack *s){
        if(s->top==-1){
            return true;
        }
        return false;
    }
    /* 入栈 */
    int pushSeqStack(SeqStack *s, int num){
        /* 栈满不能入栈 */
        if(s->top==MAXSIZE-1){
            return 1;
        }else{
            s->data[++s->top] = num;
            return 0;
        }
    }
    /* 出栈 */
    int popSeqStack(SeqStack *s){
        return s->data[s->top--];
    }
    /* 取栈顶元素 */
    int peekSeqStack(SeqStack *s){
        return s->data[s->top];
    }
  • 相关阅读:
    哈希算法是怎么实现的
    高并发下日志组件的各种实现方式
    算法是如何影响程序编码方式的
    <<.NET B/S 架构实践>> 几种概念区别
    如何扩大系统盘空间
    区别:ASP.NET MVC的Model、DTO、Command
    能递归检查DataAnnotations的验证函数
    NuGet的本地服务器安装与Package的发布(呕吐)
    多模块分布式系统的简单服务访问
    多模块后带来的问题解决方法
  • 原文地址:https://www.cnblogs.com/noonjuan/p/11492016.html
Copyright © 2020-2023  润新知