- 博客(15)
- 问答 (1)
- 收藏
- 关注
原创 利用树的层序遍历创建一颗二叉链表树
创建任意一颗二叉链表树,在输入序列中标明每一个树结点及其两个孩子结点,若孩子结点为空,需要用特殊值标记。 如,若要构造图中的二叉树,
2021-06-10 16:31:59
689
原创 在二叉树中输出值为x的结点的所有祖先结点,假设值为x的结点不多于1个
typedef struct TreeNode { int data; struct TreeNode* left, *right; }TNode,*BTree; //由后序遍历的递归算法改编 bool PostOrder(BTree T, int x) { if (T != NULL) { //分别在T的左右子树递归的查找结点值为x的孩子结点 bool b1 = PostOrder(T->left, x); bool b2 = PostOrder(T->r.
2021-06-08 16:26:37
2179
1
原创 删除二叉树中所有以x为值的子树
#include<stdio.h> #include<stdlib.h> typedef struct TreeNode { int data; struct TreeNode* left, *right; }TNode,*BTree; void PreOrder(BTree T) { if (T != NULL) { printf("%d ", T->data); PreOrder(T->left); PreOrder(T->righ.
2021-06-08 15:36:48
1648
原创 求二叉树先序序列中第k个结点的值
#include<stdio.h> #include<stdlib.h> typedef struct TreeNode { int data; struct TreeNode* left, *right; }TNode,*BTree; int i = 1; //直接在先序遍历的递归算法中进行改编 //全局变量i也可以作为函数参数的引用,即int&i。 void PreOrder2(BTree T, int k) { if (T != NULL&&a.
2021-06-08 15:02:55
2941
4
原创 使用队列创建一颗完全二叉树(C++语言)
#include<stdio.h> #include<stdlib.h> #pragma region 队列操作 //队列结点定义,void*保存指向树结点的指针 typedef struct QueueNode { void* data; struct QueueNode* next; }QNode; typedef struct Queue { QNode* front, * rear; }; //初始化队列,使用头结点 void InitQueue.
2021-06-03 16:04:35
1279
原创 2019年考研计算机统考408真题算法题
题目如图所示 算法思想:首先将链表从中间断开,分成前后两个小链表,再将后链表逆置,然后插入到前链表中。 具体代码如下 #include<stdio.h> #include<stdlib.h> typedef struct DNode { int data; struct DNode* next; }Node,*Link; void Create(Link& link) { link = (Link)malloc(sizeof(Node)
2021-06-02 15:58:24
2562
原创 2011年考研计算机统考408真题算法题
题目如图所示 算法思想(使用c++语言): (1)利用带头结点的单链表存储升序序列。 (2)计算中位数K的位置, (3)由于序列递增有序,通过循环比较两个链表结点的值,将结点值较小的结点所在链表移到下一结点,并递减K,当K为0时即找到中位数 注:当然可以用两个一维数组,计算中位数K的位置,通过改变下标来找到中位数,我这里是想多多练习单链表,408在链表上出编程题蛮多的,同时 带头结点的单链表处理起来方便一些。 #include<stdio.h> #include<std
2021-05-27 15:46:04
2437
1
原创 一维数组的循环右移与循环左移
本人代码如下,欢迎大佬指正 //循环右移 void Func(int arr[], int len, int k) { int t1 = arr[0], t2; for (int j = 0; j < k; j++) { for (int i = 1; i < len; i++) { t2 = arr[i]; arr[i] = t1; t1 = t2; } arr[0] = t1; } } //循环左移 void Func1(int arr[],
2021-05-26 15:35:13
1187
原创 反复找出循环单链表中的最小结点,打印并删除,直到表空为止
个人代码如下,欢迎大佬指正 #include<stdio.h> #include<stdlib.h> typedef struct LNode { int data; struct LNode* next; }Node,*Link; void Func(Link& link) { Node* p, *pre,*q; //循环每次找到一个最小的结点,然后删掉,故这里只要判断是不是空表 while (link->next !=
2021-05-20 15:34:45
612
原创 将两个升序的单链表合并成一个降序的单链表,要求归并后的单链表是原先链表中的一个 C++语言
条件也可改为“要求空间复杂度O(1)”。 代码如下,欢迎大佬指正。 #include<stdio.h> #include<stdlib.h> typedef struct LNode { int data; struct LNode* next; }Node,*Link; //初始化一个链表 void Init(Link& link) { link = (Link)malloc(sizeof(Node)); link->next
2021-05-17 15:07:28
1911
原创 在一个递增有序的单链表中,去掉数值相同的元素
代码如下,欢迎大佬指正 #include<stdio.h> #include<stdlib.h> typedef struct LNode { int data; struct LNode* next; }Node,*Link; //链表初始化 void Init(Link& link) { link = (Link)malloc(sizeof(Node)); link->next = NULL; } void Func(Lin
2021-05-16 12:03:39
785
原创 将一个带头结点的单链表分成两个带头结点的单链表,使得一个含有原链表的所有奇结点,一个含有原链表的所有偶节点,且不改变原序
代码如下,欢迎大佬指正。 #include<stdio.h> #include<stdlib.h> typedef struct LNode { int data; struct LNode* next; }Node,*Link; //将link链表分解,采用尾插法来保持原有顺序 void Func(Link& link, Link& link1, Link& link2) { int k = 1;//处理奇结点偶节点
2021-05-15 12:20:37
1008
原创 通过带头结点的单链表L实现从尾到头反向输出每个结点的值
个人代码如下,采用头插法建立一个新链表,时间复杂度O(N),空间复杂度O(N)。 #include<stdio.h> #include<stdlib.h> typedef struct LNode { int data; struct LNode* next; }Node,*Link; //初始化一个带头结点的链表 void Init(Link& link) { link = (Link)malloc(sizeof(Node)); li
2021-05-13 17:01:28
2578
原创 在带头结点的单链表中删除所有值为x的结点
个人代码如下所示,欢迎大佬指正。 #include<stdio.h> #include<stdlib.h> typedef struct LNode { int data; struct LNode* next; }Node,*Link; //删除值为x的结点 void Delete(Link& link, int x) { Node* p = link,*q; while (p->next!=NULL) {
2021-05-13 16:13:19
7025
6
空空如也
vs写c++,时不时连注释都显示表示错误的红色波浪线,但是运行没问题,怎么办?
2022-01-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅