
数据结构
文章平均质量分 75
数据结构学习笔记
Mappyland
这个作者很懒,什么都没留下…
展开
-
数据结构 树常见算法问题
数据结构,树和二叉树常见算法算法和问题来自于试卷,辅导书,以及网络。// 二叉树的数据结构typedef struct BiTNode{ //二叉链表 char data; //默认char型,可替换 struct BiTNode *lchild,*rchild;}BiTNode, *BiTree;// 树的数据结构typedef struct { //树的双亲表示法 char data原创 2020-10-22 21:36:54 · 333 阅读 · 0 评论 -
数据结构 二叉树遍历专题
// 二叉树的数据结构typedef struct BiTNode{ //二叉链表 char data; //默认char型,可替换 struct BiTNode *lchild,*rchild;}BiTNode, *BiTree;1. 二叉树先序,中序,后续遍历递归算法。//先序void postorder(BiTree T){ if(T!=NULL) { visit(T); postorder(T-原创 2020-10-14 19:00:51 · 307 阅读 · 0 评论 -
数据结构 栈和队列常见算法问题
数据结构,栈和队列常见算法算法和问题来自于试卷,辅导书,以及网络。// 数据结构typedef struct { int data[Maxsize]; int top;}Sqstack;```//顺序栈typedef struct { int data[Maxsize]; int front,rear;}Squeue;算法3.1.1假设I,O分别表示入栈和出栈操作。栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由I和O组成的序列,可操作的序列称为合原创 2020-10-13 16:59:39 · 1097 阅读 · 0 评论 -
数据结构 链表常见算法问题(二)
数据结构,线性表,链表常见算法算法和问题来自于试卷,辅导书,以及网络。// 数据结构typedef struct LNode{ int data; struct Lnode *next;}LNode,*LinkList;算法2.2.11假设有两个单链表,其中元素递增排列,编写算法将这两个链表归并为一个按元素值递减次序排列的单链表,要求利用原来两个单链表的节点存放归并后的节点。分析:假设有A,B两个链表,均带有头节点,将他们的节点依次取下比较,对较小的采用头插法即可。void原创 2020-10-09 19:42:20 · 419 阅读 · 0 评论 -
数据结构 链表常见算法问题(一)
数据结构,线性表,链表常见算法算法和问题来自于试卷,辅导书,以及网络。//顺序表的一般数据结构typedef struct LNode{ int data; struct Lnode *next;}LNode,*LinkList;算法2.2.1设计一个递归算法,删除不带头节点的单链表L中所有值为x的节点分析:略bool deleteX(LinkList &L,int x){ LinkList *p; if(L==NULL) return 0; else if原创 2020-10-07 16:19:06 · 635 阅读 · 0 评论 -
数据结构 顺序表常见算法问题
//数据结构typedef struct{ int data[Maxsize]; int length;}SqList;算法2.1.1从顺序表中删除具有最小值的元素,并由函数返回被删元素值。空出位置由最后一个补齐算法很简单,基本思想可参照简单选择排序思想int deleteMin(Sqlist &L, int &e){ int i,j; if(L.length==0) return 0; min=L.data[0]; for(i=1;i<L原创 2020-10-04 15:55:39 · 2766 阅读 · 0 评论 -
数据结构:栈的应用:N阶汉诺塔递归。
汉诺塔问题,看似复杂,但是如果用递归的思想去解决,就十分容易了。假设有三个柱子x,y,z①当只有一个圆盘时,直接将x移动到z上②当有n个圆盘时,具体拆分为,将n-1个圆盘从x移动到y上,再将1个圆盘从x移动到z上,再将n-1个圆盘从y移动到z上,此时x为空柱,用于辅助移动。n-1个圆盘的移动又可以具体拆分,如此递归下去。//假设圆盘从上到下编号为1~nvoid hano(int n,char x,char y, char z){ if(n==0) return 0; if(n==1) m原创 2020-10-02 17:18:54 · 301 阅读 · 0 评论 -
数据结构:栈的应用3.4.2,中缀如何转后缀
前面已经提到,计算机计算表达式的值是通过后缀表达式实现的A+B*(C-D)-E/F是我们一般生活中经常见到的中缀表达式,转换为后缀表达式变为ABCD-*+EF/-,虽然转换可以通过手动添加括号并且后移实验,那么在计算机中如何进行这种转换呢。计算机中转后仍然要用到栈。对于待转换序列A+B*(C-D)-E/F,如果是操作数,则直接输出,如果是操作符,则压入栈中。当栈中存在操作符时,又有新的操作符时,需要判断栈中和栈外的操作符优先级,做出相应判断,若栈外运算符优先级较高时,压入栈;若栈外运算符优先级较低,原创 2020-10-02 17:05:12 · 108 阅读 · 0 评论 -
数据结构 栈的应用3.4 表达式求值
计算机计算表达式的值是通过后缀表达式实现的A+B*(C-D)-E/F是我们一般生活中经常见到的中缀表达式,转换为后缀表达式变为ABCD-*+EF/-.typedef struct{ int data[MaxSize]; int top;}SqStack//假设运算为整形运算,操作数为1位int opreation(int a, char op, int b){ switch(op) { case '+' :return a+b; bre原创 2020-10-02 16:25:09 · 400 阅读 · 0 评论 -
数据结构算法2.23 一元多项式相加
为了便于计算,一元多项式一般用链表存储,并设置两个域,存储系数和指数。typedef struct node{ int exp; //指数 float coef //系数 struct node next;}polynomial;void AddPoly(ploynomial &p,ploynomial &q,){ ploynomial pa,pb,q,pre; pa=p->next; pb=q->next; pre原创 2020-10-01 17:20:33 · 1361 阅读 · 0 评论 -
数据结构,栈的应用,括号匹配算法
基本思想,将括号压入一个栈当中,若是左括号,则入栈,若是右括号,则出栈一个元素,看其是否匹配,若不匹配则匹配失败。数据结构typedef struct{ char data[MaxSize]; int top;}SqStack;void push(SqStack &s; char e){ if(s.top==MaxSize) return 0; s.data[++s.top]=e;}char pop(SqStack &s; char &e){原创 2020-10-01 16:44:47 · 448 阅读 · 0 评论 -
数据结构 栈的应用,数进制转换
假设10进制和其他n进制数转换需要的数据结构typedef struct{ int data[MaxSize]; int top;}SqStack;void converse(SqStack s,int m,int n) //m是要转换的数,n是要转换的进制 可取2 8 16.{ top=-1; while(m) { s.data[++s.top]==m%n; m=m/n; } while(top!=-1)原创 2020-10-01 16:26:40 · 181 阅读 · 0 评论 -
数据结构算法2.12 将两个升序有序链表合成一个升序有序链表
假设两个链表A,B 都带头指针。基本思路:逐个比较A,B中第一个元素,选取小的,采用尾插法。数据结构:typedef struct LNode{ int data; struct LNode next;} Linklist;void mergeLinkList(Linklist &A,Linklist &B){ Linklist *p=A->next,*q=B->next ,*rear=A;//三个指针,p,q遍历A,B两个原创 2020-10-01 16:06:58 · 395 阅读 · 0 评论 -
数据结构算法2.2 求两个顺序表A.B的元素并集
基本思想,遍历B中线性表,并逐个与A中元素比较,如果A中没有此元素则插入。时间复杂度O(A.length*B.length)void union(Sqlist &A,Sqlist B){ int i=0,j=0; for(i=0;i<B.length;i++) //循环遍历B,找其中A中没有的元素 for(j=0;j<A.length&&A.data[j]!=B.data[i];j++) //逐个与A中元素比较原创 2020-10-01 15:41:07 · 2565 阅读 · 0 评论 -
数据结构算法2.1 两个有序顺序表的合并
若A,B顺序表升序排列,现在将其合成一个新的顺序表,新表仍然有序数据结构typedef struct{ int data[MaxSize]; int length;} SqList;bool merge(SqList A,SqList B,SqList &C){ int i=0,j=0,k=0; if(A.length+B.length>C.length) return 0; //表长溢出 while(i<A.length&&j<B.l原创 2020-10-01 15:27:39 · 1583 阅读 · 0 评论 -
数据结构—简单选择排序 C语言代码实现
简单选择排序和冒泡排序一样,都是数据结构中入门的排序算法,其基本思想是遍历待排序列找出最小(最大)的,并将其放在待排序列的第一个(最后一个)。// 选择最小,放在开头void SelectSort(int L[],int n){ int temp; int i,j,k;//i,j指示内外层循环 ,k记录最小值位置 for(i=0;i<n;i++) { k=i; for(j=i+1;j<n;j++) {原创 2020-09-19 15:50:42 · 722 阅读 · 0 评论 -
数据结构—快速排序 C语言代码实现
快速排序是20世纪的十大算法之一,在常见的o(nlogn)的时间复杂度的算法(快速排序,堆排序,2路归并排序)中,快速排序的平均性能也是最优的,下面是快排的c语言实现代码// 基本思想是分治法,故一般用到递归void QuickSort(int L[],int low, int high) //low和high指示排序的范围{ int temp=0; //用于存储待交换的元素的值 int i=low,j=high; if(low<high) {原创 2020-09-19 15:37:04 · 3069 阅读 · 0 评论 -
数据结构—冒泡排序 C语言代码实现(从前向后/从后向前两种)
冒泡排序的思想就是交换,假设要使序列排为递增如果从左到右比较,则如果左边的比较大就交换,如果从右向左比较,则右边的比较小就交换。//冒泡排序-从左到右交换void Bubblesort(int L[],int n){ int i,j; //记录内外循环 int flag,temp;//flag用来判断排序是否完成 temp用于完成交换 for(i=n-1;i>=0;i--) { flag=0; for(j=0;j<i;j++)原创 2020-09-19 15:14:22 · 1578 阅读 · 0 评论 -
数据结构—直接插入排序 C语言代码实现(设置和不设置哨兵两种)
void InsertSort(int L[],int n){int}//一般的方法 void InsertSort(int L[],int n){ int i,j,temp; //i记录待排元素位置,j用来寻找扎入的位置,temp记录待排元素的值 for(i=1;i<n;i++) //第一个循环,遍历待排序列 { temp=L[i]; j=i-1; while(j>=0&&temp<L原创 2020-09-17 17:11:40 · 502 阅读 · 0 评论 -
机器学习笔记:卷积神经网络(CNN)基础知识
卷积神经网络(CNN)一. ImageNet图像分类大赛(ILSVRC)二. 卷积神经网络结构三. 卷积神经网络举例:AlexNet一. ImageNet图像分类大赛(ILSVRC)ImageNet是针对超过1500万个物品的高分辨率图像的数据集,大约有22,000个类别。图像是从网上收集的,并由人工使用Ama-s Mechanical Turk工具进行标记。2010-2017,作为Pascal视觉对象挑战赛的一部分,举办了名为ImageNet大规模视觉识别挑战赛(ILSVRC)的年度比赛。ILSVRC原创 2020-06-09 21:30:10 · 479 阅读 · 0 评论