408王道数据结构课后代码习题(廿四)

简介: 408王道数据结构课后代码习题(廿四)

前言



计划更新23王道数据结构所有课后代码习题的实现,虽然考试写的一般都是伪代码,但是强迫症的我还是全部实现了一遍,仓库在这里


代码是用 C++ 写的,全部可以编译运行,尽量包含暴力解和最优解(考试时间不够可以直接怼一个暴力上去,稳拿一半分以上)。


持续更新,目前更新进度:


  • 线性表 14/14
  • 链表 25/25
  • 栈 3/3
  • 队列 4/4
  • 栈和队列的应用
  • ...


仅供参考! 会包含一些考试不让写的语法,可能也会有一些错误。


3.2.6, 1



image.png


  • 队空:Q.front == Q.rear && Q.tag == 0
  • 队满:Q.front == Q.rear && Q.tag == 1
  • 因为只有进队操作会导致队满,所以在进队时将tag置为1,同理在出队时将tag置为0


bool enqueue(Queue &Q, int x) {
  if (Q.front == Q.rear && Q.tag == 1) {
    cout << "队列满" << endl;
    return false;
  }
  Q.data[Q.rear] = x;
  Q.rear = (Q.rear + 1) % maxsize;
  Q.tag = 1;
  return true;
}
bool dequeue(Queue &Q, int &x) {
  if (Q.front == Q.rear && Q.tag == 0) {
    cout << "队列空" << endl;
    return false;
  }
  x = Q.data[Q.front];
  Q.front = (Q.front + 1) % maxsize;
  Q.tag = 0;
  return true;
}
复制代码


2


image.png


  • 队内元素逐个出队入栈,全部入栈后再逐个出栈入队列即可
  • 非常简单的一道题,就是考察“先进先出”以及“后进先出”的性质


void reverseQueue(Queue &Q, Stack &S) {
  int x;
  while (!isEmpty(Q)) {
    dequeue(Q, x);
    push(S, x);
  }
  while (!isEmpty(S)) {
    pop(S, x);
    enqueue(Q, x);
  }
}
复制代码


3


image.png


  • S1的入栈用作入队,若S1满且S2空,才能将S1的元素插入S2中
  • S2的出栈用作出队,若S2空,将S1的所有元素插入S2中
  • 判空只需要判断两个栈是否都为空


bool Enqueue(Stack &S1, Stack &S2, int x) {
  if (!StackOverflow(S1)) {
    Push(S1, x);
    return true;
  }
  if (StackOverflow(S1) && !StackEmpty(S2)) {
    cout << "队列满" << endl;
    return false;
  }
  // S1满且S2空,先将S1中的元素全部入S2,再入S1
  while (!StackEmpty(S1)) {
    int tmp;
    Pop(S1, tmp);
    Push(S2, tmp);
  }
  Push(S1, x);
  return true;
}
bool Dequeue(Stack &S1, Stack &S2, int &x) {
  if (!StackEmpty(S2)) {
    Pop(S2, x);
    return true;
  } 
  if (StackEmpty(S1)) {
    cout << "队列空" << endl;
    return false;
  }
  // S2为空且S1不为空
  while (!StackEmpty(S1)) {
    int tmp;
    Pop(S1, tmp);
    Push(S2, tmp);
  }
  Pop(S2, x);
  return true;
}
bool QueueEmpty(Stack S1, Stack S2) {
  return StackEmpty(S1) && StackEmpty(S2);
}
复制代码


4


image.png


  • 如题,应选择链式存储结构,且为包含头尾指针的单循环链表(头front,尾rear)
  • 队空条件 front == rear
  • 队满条件 front == rear -> next
  • 遵循”入判满,出判空“的原则,写出伪代码即可
目录
相关文章
|
2天前
|
Go 索引
掌握Go语言:Go语言范围,优雅遍历数据结构,简化代码操作实战解析(24)
掌握Go语言:Go语言范围,优雅遍历数据结构,简化代码操作实战解析(24)
|
2天前
|
存储 编译器 C语言
【数据结构】C语言实现链队列(附完整运行代码)
【数据结构】C语言实现链队列(附完整运行代码)
43 0
|
2天前
|
存储 编译器 C语言
【数据结构】C语言实现带头双向循环链表万字详解(附完整运行代码)
【数据结构】C语言实现带头双向循环链表万字详解(附完整运行代码)
11 0
|
2天前
|
存储 算法 分布式数据库
数据结构第五课 -----二叉树的代码实现
数据结构第五课 -----二叉树的代码实现
|
2天前
|
存储
数据结构基础:一篇文章教你单链表(头插,尾插,查找,头删等的解析和代码)
数据结构基础:一篇文章教你单链表(头插,尾插,查找,头删等的解析和代码)
|
2天前
|
存储 算法 C语言
C语言进阶:顺序表(数据结构基础) (以通讯录项目为代码练习)
C语言进阶:顺序表(数据结构基础) (以通讯录项目为代码练习)
|
2天前
|
算法 调度 C++
[数据结构与算法]贪心算法(原理+代码)
[数据结构与算法]贪心算法(原理+代码)
|
2天前
|
存储 算法 编译器
【数据结构】C语言实现链式二叉树(附完整运行代码)
【数据结构】C语言实现链式二叉树(附完整运行代码)
38 1
|
2天前
|
存储 程序员 编译器
【数据结构】C语言实现堆(附完整运行代码)
【数据结构】C语言实现堆(附完整运行代码)
31 0
|
2天前
|
存储 编译器 C语言
【数据结构】C语言实现顺序栈(附完整运行代码)
【数据结构】C语言实现顺序栈(附完整运行代码)
37 0