![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
前程韶光
学生
展开
-
二叉树:已知先序,中序求后序遍历
#include <iostream>#include <cstring>#define MAX 50+3using namespace std;typedef char Elem_Type;typedef struct BiTree{ Elem_Type data;//数据 struct BiTree* Lchild;//左孩子 struct BiTree* Rchild;//右孩子}BiTree; //要查找的元素 查找的地方原创 2021-06-25 16:49:06 · 169 阅读 · 0 评论 -
二插排序树
bool searchNode(BSTree T, ElemType kval, BSTree f, BSTree& p)//在T中搜索数据域为kval的节点并用p指向,f为T的双亲节点,初值为null{ if (!T)//T为空,p指向其路径上访问的最后一个节点,并返回false { p = f; return false; } if (T->data == kval)//搜索成功 { p = T;//p指向该数据所在节点 return true; } if原创 2021-05-16 13:34:14 · 79 阅读 · 0 评论 -
线索二叉树(生成,线索化,遍历)
头文件:#include<iostream>using namespace std;typedef struct BiThrNode { ElemType data; struct BiThrNode* Lchild, * Rchild; // 左右指针 PointerType LTag, RTag; // 左右指针类型标志} *BiThrTree;void InOrderThreading(BiThrTree& Thrt, BiThrTree BT);//线索化二叉树原创 2021-04-19 17:16:18 · 197 阅读 · 0 评论 -
循环队列的基本操作及杨辉三角的有关算法
如果要求计算并输出杨辉三角前 n 行的值,;‘则队列的最大空间应为 n+2。假设队列中已存有第 k 行的计算结果,并为了计算方便,在两行之间添加一个“0”作为行界值,则在计算第 k+1 行之前,头指针正指向第 k 行的“0”,而尾元素为第 k+1 行的“0”。由此从左到右依次输出第 k 行的值,并将计算所得的第 k+1 行的值插入队列的基本操作为:头文件:#include<iostream>#define QelemType int#define MAXSIZE 100typedef原创 2021-04-11 11:00:28 · 306 阅读 · 0 评论 -
栈的应用:表达式求值问题进阶(含多位数和小数的多项式)
主要是polrear函数即后缀表达式的计算不同void polrear(stack& Pol, char PolRear[1000], char& temp1, char& temp2, int& length, int a[1000])//构造后缀表达式{ for (int h = 0; h < 1000; h++)//数组a的作用在与记录所有的多位数,相当于标签,0表示为运算符,其他则为操作数 { a[h] = 0; } int i = 1; ji原创 2021-04-10 15:53:53 · 812 阅读 · 0 评论 -
栈的应用:表达式求值问题
1基本思路任何一个表达式都是由操作数(operand)、运算符(operator)和界限符(delimiter)组成,其中,操作数可以是常数也可以是被说明为变量或常量的标识符;运算符可以分为算术运算符、关系运算符和逻辑运算符等三类;基本界限符有左右括弧和表达式结束符等 。为了叙述简洁,在此仅限于讨论只含二元运算符的算术表达式。由于算术运算的规则是:先乘除后加减、先左后右和先括弧内后括弧外,则对表达式进行运算不能按其中运算符出现的先后次序进行。由于算术运算的规则是:先乘除后加减、先左后右和先括弧内后括弧原创 2021-04-03 11:22:06 · 1355 阅读 · 0 评论 -
栈的基本操作(初始化,进栈,出栈等)
#include<stdio.h>#include<stdlib.h>#define ElemType int#define INITSIZE 100//初始时栈的容量#define ADDEDSIZE 10//每次新增加的容量typedef struct{ ElemType* base; ElemType* top; int stacksize;}stack;void InitStack(stack &S)//初始化{ S.base = (Ele原创 2021-03-29 20:37:52 · 1508 阅读 · 0 评论 -
链表实现一元多项式的相加
代码如下:#include<stdio.h>#include<stdlib.h>struct Polynomial//结构体的定义{ float coef;//系数 int expn;//指数 Polynomial* next;};void print(Polynomial* L){ Polynomial* Q;//此处最好新建指针,防止无意中对L的位置做出改变 Q = L; while (Q != NULL) { if (Q->coef !=原创 2021-03-21 17:51:47 · 1760 阅读 · 0 评论 -
静态链表的基本操作
静态链表的基本操作包括建立与输出,删除与插入操作与单链表类似,麻烦的点在于每次遍历都要建立两个临时变量,还要特殊判断第一个节点,并将删除后的节点再次初始化其游标的值,就不写了#include<stdio.h>#include<stdlib.h>typedef struct Node{ int data; int cur;}Node;#define MAXSIZE 1000typedef Node staticlist[MAXSIZE];void initlist(原创 2021-03-18 15:23:43 · 257 阅读 · 0 评论 -
合并两个非递减排列类的顺序线性表
伪c语言如下(函数)根据题目就知道显然使用链表更加简单(就是简单的连线)思想:以L线性表作为基准,遍历Q线性表,满足条件及插入即可,需要注意,每次插入都要记住插入点的位置(n),下次插入必定在此处之后,每找到一个点就开始从此处开始将L的元素向后移一个位置,经多次调试才发现插入点为最后一个位置是要做特殊判断(此时不需要移动L中的元素)void mergelist(sqlist &L){sqlist Q;int i;int e;int l, j, k;int j1,n;printf(原创 2021-03-15 23:20:55 · 1291 阅读 · 0 评论 -
. 已知一单链表中的数据元素含有三个字符(即:字母字符、数字字符和其它字符)。试编写 算法,构造三个循环链表,使每个循环链表中只含同一类的字符,且利用原表中的结点空间 作为这三个表的结点空间
两种思路:1,建立三个指针,分别指向字母,数字和其他字符,遍历链表,将符合条件的链入即可2,将三种字符分别存在现有链表的三个位置,便利两遍(移动两遍,第一遍将一种类型取出,依次与链表前面的部分交换位置即可总体来说,都是两种不难理解,不难想到的思路,代码略(滑稽)...原创 2021-03-13 23:47:18 · 1462 阅读 · 3 评论 -
单链表的详细操作
#include<stdio.h>#include<stdlib.h>struct ListNode {int data;ListNode* next;};ListNode* insert( ListNode * L, int l, int e,int* len);ListNode* newlist(ListNode* L, int* len);void print(ListNode L);bool locationright(int i, int e);List原创 2021-03-13 17:17:28 · 120 阅读 · 2 评论 -
链表的头插法和尾插法
头插法:readlisthead尾插法:readlisttail#include<stdio.h>#include<stdlib.h>struct ListNode {int data;ListNode* next;};ListNode* readlisthead(){struct ListNode head,tail,p;head = (struct ListNode)(malloc(sizeof(ListNode)));head->next = NU原创 2021-03-13 13:15:32 · 792 阅读 · 0 评论