• 《数据结构》 栈代码操作集合


    栈的基本操作代码,来自《数据结构-用C语言描述》(第二版)高教社

    栈的数据结构相当于受限制(只能从栈顶取元素,先进后出LIFO)的顺序表或单链表,可以参考之前的博客。

    /*以下为顺序栈*/
    #define Stack_Size 50   /*设栈中元素为50*/
    typedef struct {
        StackElemType elem[Stack_Size];
        int top;    //用来存放栈顶元素的下标
    } SeqStack;
    /*初始化*/
    void InitStack(SeqStck) {
        S->top = -1;
    }
    /*进栈:将x置入新栈顶*/
    int Push(SeqStack *S, StackElemType x) {
        if(S->top == Stack_Size -1) {
            return(FALSE);
        }
        S->top++;
        S->elem[S->top] = x;
        return(TRUE);
    }
    /*出栈*/
    int Pop(SeqStack *S, StackElemType *x) {
        if(S->top = -1) {
            return(FALSE);
        }
        else {
            *x = S->elem[top];
            top--;      //修改栈顶指针 *x = S->elem[top--]
            return(TRUE);
        }
    }
    /*读栈顶*/
    int GetTop(SeqStack *S, StackElemType *x) {
        if(top = -1) {
            return(FALSE);
        }
        else {
            *x = S->elem[S-top];
            return(TRUE);
        }
    }
    /*以下为链栈*/
    typedef struct node {
        StackElemType data;
        struct node *next;
    } LinkStackNode, *LinkStack;
    /*初始化;即单链表的初始化*/
    InitLink(LinkStack *top) {
        *top =(LinkStack)malloc(sizeof(Node));
        (*top)->next = NULL;
    }
    /*进栈*/
    int Push(LinkStack top, StackElemType x) {
        LinkStackNode *temp;
        temp = (LinkStackNode *)malloc(sizeof(LinkStackNode));
        if(temp == NULL) {
            return(FALSE);
        }
        temp->data = x;
        temp->next = top->next;
        top->next = temp;
        return (TRUE);
    }
    int Pop(LinkStack top, StackElemType *x) {
        LinkStackNode *temp;
        temp = top->next;
        if(top == NULL){
            return (FALSE);
        }
        top->next = temp->next;
        *x = temp->data;
        free(temp);
        return(TRUE);
    }
  • 相关阅读:
    Elasticsearch之优化
    前端页面加载速度优化---Ngnix之GZIP压缩
    Nginx的try_files使用详解
    elk6.3.2在线安装中文分词工具IK
    filebeat5与filebeat6配置index的差异
    十分钟部署Anemometer作为Mysql慢查询可视化系统
    虚拟机磁盘逻辑卷扩容
    十分钟搭建和使用ELK日志分析系统
    关于NODEJS性能测试和优缺点总结
    十分钟搭建和使用sonarqube代码质量管理平台
  • 原文地址:https://www.cnblogs.com/wanghongze95/p/13842661.html
Copyright © 2020-2023  润新知