数据结构
我的笔记
王佳Gre
hi
展开
-
数据结构C语言树
二叉树的存储结构顺序存储:适合于完全二叉树链式存储:定义typedef struct BTNode{ char data; struct BTNode *lchild; struct BTNode *rchild;}BTNode;递归遍历:先序,中序,后序先序void preorder(BTNode *p){ if(p!=NULL){ Visit(p); preorder(p->lchild); preorder(p->rchild); }}中序v原创 2021-07-24 21:00:55 · 199 阅读 · 0 评论 -
数据结构C语言——循环队列
队列的顺序存储定义typedef int Position;typedef struct QNode * PtrToQNode;struct QNode{ ElementType * Data; Position Front,Rear; int MaxSize;};typedef PtrToQNode Queue;Queue CreateQueue(int MaxSize){ Queue Q=(Queue)malloc(sizeof(struct QNode)); Q->Dat原创 2021-07-19 16:29:14 · 434 阅读 · 0 评论 -
数据结构C语言——堆栈
在C语言数据结构中,关于数据元素的类型定义均用“ ElemType e;”来表示,其中e是表示数据元素的变量,而ElemType则是它的类型,ElemType的含义就是“数据元素的类型”,是一个抽象的概念,是表示我们所要使用的数据元素应有的类型。ElemType是数据结构上为了说明问题而用的一个词。它是element type(“元素的类型”)的简化体。因为数据结构是讨论抽象的数据结构和算法,一种结构中元素的类型不一定是整型、字符型、浮点型或者用户自定义类型,为了不重复说明,使用过程用 “elemt.原创 2021-07-17 23:03:30 · 2096 阅读 · 3 评论 -
BFS全排列
题目描述输出自然数 11 到 nn 所有不重复的排列,即 nn 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。输入格式一个整数 nn。输出格式组成的所有不重复的数字序列,每行一个序列。每个数字保留 5 个宽。import java.util.Scanner;public class Main { static int n=0; static int[] used=new int[100]; static int[] pd=new int[100]; //pd是判原创 2020-07-08 15:02:31 · 1105 阅读 · 2 评论 -
简单数学问题
1.最大公约数正整数最大公约数是指a与b的所有公约数中最大的那个公约数,例如4和6最大的公约数是2.求解最大公约数常用方法欧几里得算法递归形式:1.递归式:gcd(a,b)=gcd(b,a%b)2.递归边界:gcd(a,0)int gcd(int a,int b){if(b==0)return a;elsereturn gcd(b,a%b);int gcd(int a,int b){return !b ? a:gcd(b,a%b);}2.最小公倍数的求法最小公倍数的求法是在原创 2020-07-08 14:52:51 · 300 阅读 · 0 评论 -
交换排序——冒泡排序
冒泡排序是最简单的交换排序,对元素个数为N的待排序序列进行排序时,共进行N-1次循环,在第k次循环时,对从第1到第N-k个元素进行从前往后比较,每次比较相邻的两个元素,若前一个元素大于后一个元素,则互换位置,这样一次循环下来,就把第k大的元素移动到N-k位置上,成为第k趟冒泡,整个过程一共进行N-1趟冒泡,直到第一和第二个元素比较完成,最终剩余最小的元素,留在第一个位置上,排序结束。void bubble(int a[],int n){ int i,j,t; for(i=1;i<n;i+.原创 2020-06-11 17:38:54 · 297 阅读 · 0 评论 -
选择排序——简单选择排序
简单选择排序是最简单的排序思想,其思想是在未排序的序列中选出最小的元素和序列首位交换,接来下在未排序序列中再选出最小元素与序列的第二个元素交换,依次类推直至排好。void selectSort(){ for(int i=1;i<=n;i++)//进行n趟操作 { int k=i; for(int j=i;j<=n;j++)//选出[i,n]最小的元素 { if(A[j]<A[k]) { k=j; } } int tem.原创 2020-06-11 15:29:44 · 252 阅读 · 0 评论 -
习题4.5 顺序存储的二叉树的最近的公共祖先问题 (25分)
设顺序存储的二叉树中有编号为i和j的两个结点,请设计算法求出它们最近的公共祖先结点的编号和值。输入格式:输入第1行给出正整数n(≤1000),即顺序存储的最大容量;第2行给出n个非负整数,其间以空格分隔。其中0代表二叉树中的空结点(如果第1个结点为0,则代表一棵空树);第3行给出一对结点编号i和j。题目保证输入正确对应一棵二叉树,且1≤i,j≤n。输出格式:如果i或j对应的是空结点,则输出ERROR: T[x] is NULL,其中x是i或j中先发现错误的那个编号;否则在一行中输出编号为i和j的两原创 2020-06-05 22:53:27 · 640 阅读 · 0 评论 -
习题3.9 堆栈操作合法性 (20分)
问题描述假设以S和X分别表示入栈和出栈操作。如果根据一个仅由S和X构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有出现删除时栈空)且最后状态也是栈空,则称该序列是合法的堆栈操作序列。请编写程序,输入S和X序列,判断该序列是否合法。输入输入第一行给出两个正整数N和M,其中N是待测序列的个数,M(≤50)是堆栈的最大容量。随后N行,每行中给出一个仅由S和X构成的序列。序列保证不为空,且长度不超过100。输出对每个序列,在一行中输出YES如果该序列是合法的堆栈操作序列,或NO如果不是。程序设计原创 2020-05-31 18:00:15 · 805 阅读 · 0 评论 -
习题3.10 汉诺塔的非递归实现 (25分)
问题描述借助堆栈以非递归(循环)方式求解汉诺塔的问题(n, a, b, c),即将N个盘子从起始柱(标记为“a”)通过借助柱(标记为“b”)移动到目标柱(标记为“c”),并保证每个移动符合汉诺塔问题的要求。输入输入为一个正整数N,即起始柱上的盘数。输出每个操作(移动)占一行,按柱1 -> 柱2的格式输出。问题分析汉诺塔的基本思路是不断将n个盘的汉诺塔问题转换为2个n-1的问题,用递归实现,当把n盘问题转换成n-1盘问题时,问题的起始柱和目标柱都发生了变化,设n盘问题为(n,a,b,c)原创 2020-05-31 16:29:09 · 2249 阅读 · 2 评论 -
求链表的倒数第m个元素
方法一:先遍历一次链表,得到长度N,在从头遍历找到第N-m+1个元素。ElementType Find( List L, int m ){ PtrToNode p; int n = 0; p = L->Next; while(p) { n++; p = p->Next; } if(m > n)//m的位置不合法 { return ERROR; } int i = 1; P=L; for(; i <= n-m+1原创 2020-05-22 22:36:06 · 1655 阅读 · 0 评论 -
案例3-1.2最长连续递增子序列
给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列问题分析从某个位置出发,找当前连续递增的子序列,并记录长度和首尾位置找出最大长度找出最长连续递增子序列中左端点最靠左的序列#include <stdio.h>#include<stdlib.h>#define MAXSIZE 100000typedef int ElementType;typedef int Position;typedef struct LNode *List;str原创 2020-05-22 21:45:19 · 875 阅读 · 0 评论 -
案例3-1.1线性表元素的区间删除
实验内容:给定一个顺序存储的线性表,设计一个函数删除所有值大于min并且小于max的元素,删除后表中剩余元素保持顺序存储,并且相对位置不改变。函数接口定义:List Delete( List L, ElementType minD, ElementType maxD );其中List结构定义如下:typedef int Position;typedef struct LNode List;struct LNode{ElementType Data[MAXSIZE];Position La原创 2020-05-22 21:06:18 · 1367 阅读 · 0 评论