zoukankan      html  css  js  c++  java
  • 栈的顺序和链式的表示和实现

    栈是一种只能在一端进行删除和插入操作的线性表,栈的主要特点是“先进后出”。

    顺序栈:分配一块连续的存储区域存放栈中元素,并用一个变量指向当前的栈顶。

    #include <stdio.h>
    #define MAXSIZE 50
    
    typedef int elemType;
    
    typedef struct{
        elemType data[MAXSIZE];
        int top;
    }SqStack;
    
    //初始化栈 
    void init(SqStack &stk){
        stk.top=-1;
    }
    
    //判断栈是否为空 
    bool stackEmpty(SqStack stk){
        return stk.top==-1;
    }
    
    //入栈 
    int push(SqStack &stk,elemType e){
        if(stk.top==MAXSIZE-1)
            return 0;
        stk.top++;
        stk.data[stk.top]=e;
        return 1;
    }
    
    //出栈 
    int pop(SqStack &stk,elemType &x){
        if(stk.top==-1)
            return 0;
        x=stk.data[stk.top];
        stk.top--;
        return 1;
    }
    
    //取栈顶元素
    int getTop(SqStack stk,elemType &x){
        if(stk.top==-1)
            return 0;
        x=stk.data[stk.top];
        return 1;
    } 

    链栈:采用链式存储结构存储栈,栈的所有操作都是在单链表的表头进行的。

    typedef int elemType;
    typedef struct linknode{
        elemType data;
        struct linknode *next;
    }*LStack;
    
    //初始化  带头节点的链栈 
    void init(LStack &stk){
        stk=(linknode*)malloc(sizeof(linknode));
        stk->next=NULL;
    }
    
    //判断是否为空 
    int isEmpty(LStack stk){
        return stk->next==NULL;
    }
    
    //入栈
    int push(LStack &stk,elemType e){
        linknode *node = (linknode*)malloc(sizeof(linknode));
        if(node==NULL)
            return 0;
        node->data=e;
        node->next=stk->next;
        stk->next=node;
        return 1;
    } 
    
    //出栈
    int pop(LStack &stk,elemType &x){
        if(stk->next==NULL)
            return 0;
        linknode *node = stk->next;
        x=node->data;
        stk->next=node->next;
        free(node);
        return 1;
    } 
    
    //获取栈顶元素
    int getTop(LStack stk,elemType &x){
        if(stk->next==NULL)
            return 0;
        x=stk->next->data;
        return 1;
    } 
    
    //清空栈中元素
    void clear(LStack &stk){
        linknode *node = stk->next;
        while(node!=NULL){
            stk->next=node->next;
            free(node);
            node=stk->next;
        }
    } 
  • 相关阅读:
    汉文博士——支持生僻古难字检索的开放式免费汉语词典
    delphi 实现接口 Unsatisfied forward or external declaration
    注册服务程序
    递归的使用
    NTLDR is missing 错误处理方法
    测试
    常见数据类型的存储结构
    多维分析
    showmodule
    pos函数
  • 原文地址:https://www.cnblogs.com/hekuiFlye/p/9371586.html
Copyright © 2011-2022 走看看