![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
懵懂的小黄
一切都是最好的安排
展开
-
最长上升序列(动态规划)
1、题目要求给定一个序列A={x1,x2,x3,x4……xn},求A的上升子序列的长度,子序列不要求连续。2、用动态规划的四步解题(1)最长上升序列的结构若序列A的长度为1,则最长上升子序列的长度就为1,可以用dp【i】(i表示以a[i]结尾的最长上升序列的长度)来表示,同时也可以用dp[j]除了a[i]之外的最长上升序列的长度,其中0<=j<i,a[i]>a[j],那么最长上升序列的长度也可以用dp[j]+1来表示。(2)递归公式dp[i]=max{dp[i],dp[j]+1原创 2021-09-29 11:19:43 · 131 阅读 · 0 评论 -
2022江南大学研究生
有没有报考江南大学研究生的同学呢,或者参加过2021界研究生考试的学长学姐,有的话加一下我的微信18721599103 一起讨论一下851的复习方法以及考试内容原创 2021-07-20 20:51:50 · 301 阅读 · 0 评论 -
C++函数递归调用(汉诺塔实验)
1、定义函数的递归调用是指在调用一个函数的过程中又出现直接或间接地调用该函数本身,成为函数地递归调用。2、简单案例(目的是便于理解,该调用是错误的调用,是个无限循环)int a(int x){int y,z;z=a(y);return (z);}3、汉诺塔问题古代有一个梵塔,塔内有3个座位A,B,C。开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把64个盘子从A座移动到C座,但规定每次只允许移动一个盘,且在移动过程中,在3个座上都始终大盘在下,小盘在上。在移动原创 2021-08-10 14:26:12 · 1172 阅读 · 0 评论 -
C++中指针和指针变量(仅是个人理解)
1、什么是指针?指针就是存放变量的地址2、什么是指针变量?指针变量就是存放地址的变量3、开发指针和指针变量的目的?指针提供了对地址操作的一种方法,使用指针可以更好地对计算机底层硬件进行操作。4、图形理解pointer代表指针变量,存放的是变量a的地址,2000代表变量a存放100的存储单元的地址,*pointer代表的就是找到1005、指针变量定义类型名 *指针变量名例如 int *pointer6、指针变量赋值int *p1;int a;p1=&a;7、&原创 2021-08-10 21:29:36 · 516 阅读 · 0 评论 -
C++选择法排序
1、定义选择法是指将每个数都与数组中的数比较,然后和最小的数交换位置,共进行n-1轮比较。2、步骤3、编写程序int main(){ void sort(int array[],int n);//声明函数 int a[5],i; //定义一个数组和变量 printf("请输入5个数:\n"); for(i=0;i<5;i++) //循环输入数组的值 { scanf("%d",&a[i]); } sort(a,5); //调用sort函数 print原创 2021-08-10 15:38:34 · 3512 阅读 · 2 评论 -
C++求最大公约数和最大公倍数
int main(){ int yue(int x,int y); //函数声明 int bei(int x,int y); int a,b; printf("请输入两个数:\n"); scanf("%d%d",&a,&b); printf("%d和%d的最大公约数是:%d\n",a,b,yue(a,b)); printf("%d和%d的最小公倍数是:%d\n",a,b,bei(a,b)); system("pause"); return 0;}//最大公约数 辗原创 2021-08-10 16:51:03 · 311 阅读 · 0 评论 -
C++指针的总结(个人理解)
一、地址和指针1、 地址和指针(1)地址:变量地址就是存放变量的地址(2)指针:指针就是一个地址2、指针变量指针变量是用来放地址的一个变量,简单点理解就是,指针变量是存放指针的。二、变量的指针和指向变量的指针1、指针变量定义类型名 *指针变量名例如 int *p2、指针变量的运用(1)给指针变量赋值定义一个指针变量和普通变量:int *p,int a=1;然后给p赋值 p=&a;因为p为指针变量,故存放的是a的地址。(2)输出指针变量所指的变量值。printf("原创 2021-08-12 10:54:22 · 254 阅读 · 0 评论 -
C++链表综合操作
链表的开辟空间、输出链表、插入、删除/**链表综合操作*/#define LEN sizeof(struct student)//建立动态链表struct student{ int num; float score; struct student *next;};int n;//定义一个开辟空间的方法struct student *creat(void){ struct student *head,*p1,*p2; n=0; p1=p2=(struct student *)原创 2021-08-12 17:11:37 · 85 阅读 · 0 评论 -
中序线索二叉树找前驱和后继结点
中序二叉树//找到以p为根的子树中,第一个被中序遍历的结点ThreadNode *FirstNode(ThreadNode *p){ while(p->ltag==0){ //循环找到最左下结点 p=p->lchild; } return p;}//找到以p为根的子树中,最后一个被中序遍历的结点ThreadNode *LastNode(ThreadNode *p){ while(p->rtag==0){ p=p->rchild; } re原创 2021-08-31 15:22:09 · 4121 阅读 · 3 评论 -
线索化二叉树
//建立结点typedef struct ThreadNode{ int data; struct ThreadNode *lchild,*rchild; int ltag,rtag;}ThreadNode,*ThreadTree;ThreadNode *pre=NULL; //全局变量,指向当前访问结点的前驱//中序二叉树线索化void CreatInThread(ThreadTree T){ pre=NULL; if(T!=NULL){ //非空二叉树才可以线索化原创 2021-08-31 14:47:29 · 66 阅读 · 0 评论 -
二叉树遍历
//二叉树先序遍历void visit(BiTree T){ printf("%d",T->data);}void PreOrder(BiTree T){ if(T!=NULL){ visit(T); //访问根节点 PreOrder(T->lchild); //递归遍历左子树 PreOrder(T->rchild); //递归遍历右子树 }}//中序遍历void InOrder(BiTree T){ if(T!=N原创 2021-08-31 14:45:31 · 123 阅读 · 2 评论 -
双链表以及链表循环
//初始化双链表typedef struct DNode{ int data; struct DNode *Prior,*next;}DNode,*DLinklist;bool InitDLinklist(DLinklist &L){ L=(DNode *)malloc(sizeof(DNode)); //分配一个结点,用DNode时强调这是一个结点 if(L==NULL){ return false; //分配空间失败 } L->Prior=NULL; //头.原创 2021-08-24 08:17:25 · 84 阅读 · 0 评论 -
单链表的各种操作
//单链表初始化//不带头结点typedef struct LNode{ int data; struct LNode *next;}LNode,*LinkList;bool InitList(LinkList &L){ //&是带返回值的符号,传入的引用 L=NULL; return L;}int test(){ LinkList L; //声明一个单链表指针 InitList(L);}//带头结点typedef struct LNode{ int原创 2021-08-19 11:19:16 · 63 阅读 · 0 评论 -
顺序表操作
//顺序表 静态分配#define MaxSize 10 //定义一个长度typedef struct{ int date[MaxSize];// 定义一个数组,存放数据元素 int length; //定义一个顺序表当前长度}Sqlist; //用Sqlist这个类型名,代替了 struct Sqlist//初始化顺序表void InitList(Sqlist &L){ //&L 是指有返回值的参数,即为调用这个函数之后,数据原创 2021-08-19 06:44:15 · 84 阅读 · 0 评论