数据结构03_栈、队列和数组

本文详细阐述了栈和队列的基本概念,包括它们的定义、存储结构、算法和应用实例。重点介绍了顺序栈、链式栈、顺序队列、链式队列的实现方法,以及栈和队列在括号匹配、中缀表达式转换等场景的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

栈和队列的基本概念

栈的基本概念

  1. 栈的定义:只能在顶端进行插入和删除操作的线性表(栈顶 + 栈底 + 入栈 + 出栈 + 先进先出)
  2. 栈的存储结构:顺序栈 + 链式栈

队列的基本概念

  1. 允许在一端进行插入,在另一端进行删除的线性表(队头 + 对尾 + 入队 + 出队 + 先进先出)
  2. 队列的存储结构:顺序队 + 链队

栈和队列的存储结构、算法和应用

栈和队列的存储结构

  1. 顺序栈
#define maxSize 100
typedef struct {
    int data[maxSize];
    int top;            //栈顶元素的位置
}SqStack
  1. 链栈的定义:结点 + 栈顶结点的指针
    即为一个结点LNode
typedef struct SNode {
    int data;
    struct SNode *next;
}SNode;
  1. 顺序队列
typedef struct {
    int data[maxSize];
    int front;       //描述对头的位置
    int rear;        //描述对尾的位置
}
  1. 链队:结点的定义 + 对头和对尾指针
    1、链队结点的定义
typedef struct QNode {
    int data;
    struct QNode *next;
}QNode;

2、链队的定义

typedef struct {
    QNode *front;
    QNode *rear;
}

顺序栈的基本操作(P57)

  1. 栈空:st.top == -1; 栈底位置为0;即st.top == 0表示有一个元素
  2. 栈满:st.top == maxSize -1;栈底位置从0开始的
  3. 初始化:st.top = -1;(有结构体存在的情况下,没有的话则:int data[maxSize];st.top = -1;)
  4. 进栈:st.data[++top] = x; 要注意判断栈满的情况
  5. 出栈:x = st.data[top–];咬住判断栈空的情况

链栈的基本操作
SNode s即为链栈的头结点
判空 + 栈满(不存在) + 初始化(创建头结点) + 进栈(前插法) +
出栈(结点的删除,记得free)

栈的应用

顺序栈的应用:应用于需要有记忆功能的问题:括号匹配 + 中缀表达式转化为后缀表达式

顺序队的算法操作

  1. 循环队列(P61):队尾位置rear有元素,对头位置front没元素(也就是说要求元素出队和入队,都要先改变rear和front:使rear指向空位置,front指向有数据的位置,因此又要先+1,再%),会损失一个存储空间(front位置,用于区分对空还是队满)
  2. 队空:qu.rear == qu.front
  3. 队满:(qu.rear + 1)%maxSize == qu.front
  4. 入队:(判断队满)
qu.rear = (qu.rear + 1)%maxSize;
qu.data[qu.rear] = x;
  1. 出队:(判断队空)
qu.front= (qu.front+ 1)%maxSize;
x = qu.data[qu.front];

链队的操作

  1. 队空状态:lqu->rear == null|| lqu->front == null
  2. 入队:lqu->rear->next = p;lqu->rear = p;
    注意:如果是第一个结点时需特殊处理
  3. 出队:p = lqu->front;lqu->front = p->next;x=p->data;free(p)
    注意:没元素时不能出队 + 当时最后一个结点时要做特殊处理
  4. 初始化:malloc(lqu) + lqu->front = lqu->rear = null
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值