本文件是示例知识库的演示材料,为简化版讲义提纲。
栈是只允许在一端(栈顶)进行插入和删除的线性表, 后进先出(LIFO)。基本操作:push(入栈)、pop(出栈)、top(取栈顶)。
用数组 + 栈顶指针 top 实现。top = -1 表示空栈;
入栈 data[++top] = x;出栈 x = data[top--]。
上溢:满栈再入栈;下溢:空栈再出栈(必须判错)。
两个栈共用一个数组,栈底分设两端、栈顶相向生长,
top1 + 1 == top2 时栈满。提高空间利用率。
队列是只允许队尾插入、队头删除的线性表,先进先出(FIFO)。
用数组实现时为避免「假溢出」,把数组看成首尾相接的环:
rear = (rear + 1) % MaxSize。
front == rear;队满 (rear + 1) % MaxSize == front。(rear - front + MaxSize) % MaxSize(必考公式)。带头结点的单链表 + front/rear 两个指针;不存在溢出问题 (除非内存耗尽)。注意删除最后一个元素时 rear 要重新指向头结点。
两端都可插入删除。受限双端队列(一端只进、一端只出等)的 合法输出序列判断是常考题型。