历时2个多月,把21版王道数据结构的课后代码题全部实现了一遍,一共96道题

题目总数

3个月

文件目录结构:

目录结构

  • 编程环境:Visual Studio 2019
  • 编程语言:C/C++

其中,每道题都是一个独立的cpp文件,可以独立运行。在树和图的章节,会有输入样例和对应的示例图。

cpp文件结构

  1. 建立要求的数据结构
  2. 题目说明
  3. 题目要求的代码
  4. 运行示例

以树章节的题目示例:

#include <iostream>
#include <stack>
#include <queue>
using namespace std;

#pragma region 构造链式存储的表达式二叉树

#define MaxSize 100
#define ElemType char
#define _for(i,a,b) for(int i=(a);i<(b);i++)

typedef struct node { //树的结点
ElemType data[10];
node* left;
node* right;
}Node, * BiTree;

void CreateBiTree(BiTree& T)//要改变指针,C++可以把指针的引用传进来
{
ElemType ch;

cin >> ch;

if (ch == '#')
T = NULL;
else
{
T = new Node;
T->data[0] = ch;
CreateBiTree(T->left);
CreateBiTree(T->right);
}
}


void visit(Node* BiNode) {
cout << BiNode->data[0] << " ";
}

void InOrder(BiTree T) {
if (T) {
InOrder(T->left);
visit(T);
InOrder(T->right);
}
}

#pragma endregion

//P151.20
//【2017统考真题】请设计一个算法, 将给定的表达式树(二叉树)转换为等价的中缀表
//达式(通过括号反映操作符的计算次序)并输出。例如, 当下列两棵表达式树作为算法
//的输入时输出的等价中缀表达式分别为(a+b)*(c*(-d))和(a*b)+(-(c-α))
//二叉树结点定义如下:
//typedef struct node {
// char data[10]; //存储操作数或操作符
// struct node* left,*right;
//}BTree
//要求
//1)给出算法的基本设计思想
//2)根据设计思想, 采用C或C++语言描述算法, 关键之处给出注释。


queue<Node*> q;
stack<Node*> s;

void MedEx(BiTree T,int deep) {

if (!T)
return;
else if (!T->left && !T->right)
cout << T->data[0];
else {
if (deep > 1)
cout << "(";
MedEx(T->left, deep + 1);
cout << T->data[0];
MedEx(T->right, deep + 1);
if (deep > 1)
cout << ")";
}
}

void ToMedEx(BiTree T) {
MedEx(T, 1);
}

int main()
{
BiTree T;
cout << "请输入先序遍历顺序下各个结点的值,'#'表示没有结点:" << endl;
// input(1): * + a # # b # # * c # # - # d # #
// input(2): + * a # # b # # - # - c # # d # #
CreateBiTree(T);
cout << "中序遍历:" << endl;
InOrder(T);
cout << endl;
ToMedEx(T);
return 0;
}



/*
(1)

*
+ *
a b c -
d
(2)
+
* _
a b -
c d



*/

emm也是记录一下考研期间重新学习数据结构的过程,留个回忆~
一定要一战成硕啊!

代码仅供个人研究,及交流学习使用,版权归原作者所有,如果有侵犯到您的权利,请及时联系删除。

最后附上代码地址,顺便点个star呗~
Wangdao-Data-Structures