算法笔记的笔记——第7章 栈、队列和链表

发布时间 2023-03-24 12:14:46作者: Secant1006

  • 后进先出
  • 栈顶指针始终指向最上方元素
  • 栈为空时栈顶指针为-1

常用操作

  • 清空(clear):TOP = -1
  • 获取栈内元素个数(size):size = TOP + 1
  • 判空(empty):TOP == -1
  • 进栈(push):st[++TOP] = x
  • 出栈(pop):TOP--
  • 取栈顶(top):st[TOP]

注意:在进行出栈和取栈顶操作前必须判空。

队列

  • 先进先出
  • 队首指针front指向首元素前一个位置
  • 队尾指针back指向尾元素

常用操作

  • 清空(clear):front = back = -1
  • 获取队内元素个数(size):size = back - front
  • 判空(empty):front == back
  • 入队(push):q[++back] = x
  • 出队(pop):front++
  • 取队首(get_front):q[front + 1]
  • 取队尾(get_back):q[back]

注意:在进行出队、取队首和取队尾操作前必须判空。

链表

  • 不连续
  • 由数据域和指针域构成

为链表分配空间

  • malloc函数

    位于<cstdlib>,返回void*

    int* p = (int*)malloc(sizeof(int));

  • new运算符

    typename* p = new typename;

  • free函数

    释放malloc函数分配的空间

  • delete运算符

    释放new运算符分配的空间

基本操作

  • 创建链表

  • 查找元素

    从第一个节点开始不断判断数据域是否等于x

  • 插入元素

    注意保存前驱节点指针

  • 删除元素

    注意保存前驱节点指针

静态链表

直接用结构体数组当链表用,适用于数据较少的情况