(三)栈和队列

本文详细介绍了栈和队列这两种特殊线性表的定义、操作及其实现方式,包括顺序栈、链栈、递归与栈的关系、顺序队列和循环队列等。同时探讨了栈的‘后进先出’原则和队列的‘先进先出’原则,并分析了栈和递归调用的过程。
摘要由CSDN通过智能技术生成

1.栈:栈和队列是两种特殊的线性表,他们的逻辑结构和线性表相同,但是运算规则有限制;

1.1.栈的定义及运算:

        1.定义:栈是仅限在一端进行操作的线性表。对栈而言,允许进行插入和删除的一端称为栈顶,固定不变的一端称为栈底;

        2.栈中的元素按照“后进先出”的规则进行。当栈中没有任何元素时称为栈空,当栈的存储空间被用完时,称为栈满;

        3.对栈的基本操作:

        栈初始化:init_Stack(s);生成一个空栈;

        判断栈空:empty_Stack(s);判断栈是否为空栈,若是返回1,不是返回0;

        入栈:push_Stack(s,x);在栈的顶部插入一个元素x,使x成为新的栈顶元素;

        出栈:pop_Stack(s,x);在栈非空的情况下,将栈顶元素从栈中移除,并由x返回栈顶元素的值;

        读栈顶元素:top_Stack(s,x);在栈非空的情况下,将栈顶元素读入x中。

1.2.顺序栈的运算和实现:

        1.顺序栈是栈的顺序存储结构,利用一组连续的内存地址存放栈底到栈顶的元素;

        2.定义格式:

        typedef struct
        {
            datatype data[MAXSIZE];//栈中元素的存储空间
            int top;//栈顶
        }SeqStack;

 

        top指针表示栈顶元素在栈中的位置,栈底的下标为0,故栈空时top=-1;

        3.创建栈:

        void init_SeqStack(SeqStack **s){
            *s=(SeqStack *)malloc(sizeof(SeqStack));
            (*s)->top=-1;
        }

 

        4.判断是否栈空

        int empty_SeqStack(SeqStack *s){
            if(s->top==-1){
                return 1;
            }else{
                return 0;
            }
        }

 

        5.入栈:

        void push_SeqStack(SeqStack *s,char c){
            if(s->top==MAXSIZE-1){
                printf("Stack is full!!");
            }else{
                s->top++;
                s->data[s->top]=c;
            }
        }

 

        6.出栈:

        void Pop_SeqStack(SeqStack *s,char *c){
            if(s->top==-1){
                printf("Stack is empty!!!");
            }else{
                *c=s->data[s->top];
                s->top--;
            }
        }

 

        7.取栈

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值