数据结构(C语言版)学习笔记(第三章:栈和队列)

本文详细介绍了栈和队列这两种数据结构,包括它们的基本概念、顺序存储和链式存储的实现。栈遵循后进先出的原则,提供入栈、出栈、读取栈顶元素的操作;队列则遵循先进先出的原则,支持入队和出队操作。文中还讨论了顺序栈和链栈、顺序循环队列和链式队列的具体实现细节。
摘要由CSDN通过智能技术生成

栈(Stack)

栈的基本概念

  • 栈:只允许在一端进行插入或删除的线性表
  • 后进先出(Last in First out,LIFO
  • 栈的结构:
    • 栈顶(Top):允许进行插入和删除的一端
    • 栈底(Bottom):固定的,不允许进行插入和删除的一端
  • 因为栈本质上也是线性表,所以有顺序储存和链式储存两种储存方式

顺序栈的定义与基本操作

顺序栈的定义

typedef int ElemType;
#define MaxSize 10      //定义栈中元素的最大个数

typedef struct{
   
    ElemType data[MaxSize]; //静态数组存放栈中元素
    int top;    //栈顶指针,指向栈顶元素
}SeqStack;

初始化顺序栈以及栈的判空

//初始化栈
void InitStack(SeqStack *S){
   
    S->top = -1;
}

//判空
bool StackEmpty(SeqStack *S){
   
    if (S->top == -1) {
   
        return true;    //栈空
    }
    return false;   //不空
}

入栈操作

//入栈操作
bool Push(SeqStack *S, ElemType e){
   
    if (S->top == MaxSize-1) {
   
        return false;           //栈满报错
    }
    S->data[++S->top] = e;      //先将指向栈顶的指针+1,再入栈
    return true;
}

出栈操作

//出栈操作,返回元素e
bool Pop(SeqStack *S,ElemType *e){
   
    if (S->top == -1) {
   
        return false;	//栈空,报错
    }
    
    *e = S->data[S->top--];     //先出栈,再将栈顶指针-1
    return true;
}

读取栈顶元素

//读取栈顶元素
bool GetTop(SeqStack *S,ElemType *e){
   
    if (S
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值