数据结构
FPGA开源工坊
FPGA技术交流群:838607138
微信公众号: FPGA开源工坊
展开
-
快速排序
快速排序的分治法的一个典型应用,其时间复杂度是O(logN)。比如将6,12,1,4,7,15,3这7给元素进行排序。首先选出一个基准值,一般是选用第一个元素,这里也就是6。然后开始从最右边开始寻找比基准值小的元素放到基准值的左边,然后从左开始寻找比基准值大的元素放大基准值的右边。其执行过程:第一趟:基准值6 用一个变量来保存。设置两个哨兵,i=0,j=6。从右开始找比基准值小的元素,也...原创 2020-02-03 17:13:54 · 146 阅读 · 0 评论 -
计算2的n次幂
在计算2的n次幂的时候,我们可以采用pow这个函数,但是当数据太大的时候显然int double 等这些数据类型并不能保存下来,就会出现问题,这个时候可以采取数组存储的方式。1.使用pow函数。pow(x,y)为计算x的y次幂。如:pow(2,3)为计算2的3次幂。2.使用数组存储。核心算法是:我们把数组的每一个元素看作数字的每一位。如:a[3]={1,2,3},我们就看作12...原创 2019-03-25 21:52:37 · 6178 阅读 · 0 评论 -
双向链表的插入与删除
#include <iostream>using namespace std;struct node{ int element; struct node* prior, *next;};void create(struct node &DL){ struct node *head, *p, *q; head = &DL; head->...原创 2018-12-31 22:03:01 · 172 阅读 · 0 评论 -
顺序表的插入和删除
#include <iostream>using namespace std;#define MAX 101struct List{ int element[MAX]; int last;};void init(struct List &L){ L.last = 0; while (1) { int e; cin >> e; ...原创 2018-12-29 19:59:19 · 296 阅读 · 0 评论 -
链队列
#include<stdio.h>#include<stdlib.h>typedef struct Node* QNode;struct Node{ int element; QNode next;};struct Queue{ QNode front; QNode rear;};typedef struct Queue* LinkQue...原创 2018-10-17 20:22:39 · 105 阅读 · 0 评论 -
二叉树的建立
二叉树的结构定义:typedef struct binNode* binTree;struct binNode{ int element; binTree leftChild, rightChild;}; 二叉树的建立:binTree creatBintree(){ int a; binTree b; scanf("%d", &a); if (0 ...原创 2018-10-10 21:24:45 · 435 阅读 · 0 评论 -
栈实现进制转换
/* 正整数的进制转换,以下程序为10进制转换为2进制*/#include <stdio.h>#include <stdlib.h>typedef struct Node* Stack;struct Node{ int element; struct Node* Next;};void Init(Stack S){ S->Nex...原创 2018-10-18 19:37:37 · 219 阅读 · 0 评论 -
非递归实现二叉树遍历
/* 中序遍历非递归算法 1.遇到一个结点就把它压栈,并去遍历它的左子树 2.当左子树遍历结束后,把它弹栈并访问它 3.继续中序遍历它的右子树*/#include <stdio.h>#include <stdlib.h>typedef struct binNode* binTree;typedef struct Node* Stack;str...原创 2018-10-14 21:06:07 · 168 阅读 · 0 评论 -
二叉树的遍历
一.前序遍历前序遍历是首先访问根节点,然后是左子树,最后是右子树。如下图结果是12,13,15,16,14,17,18void print(binTree b) //前序遍历{ if (b) { printf("%d\n", b->element); print(b->leftChild); print(b->rightChild); }}...原创 2018-10-11 21:31:19 · 127 阅读 · 0 评论 -
单链表实现栈
#include <stdio.h>#include <stdlib.h>#define true 1#define false 0#define ERROR -100000typedef struct Node* Stack;struct Node{ int element; struct Node* next;};void init(St...原创 2018-10-02 09:39:34 · 309 阅读 · 0 评论 -
顺序表实现堆栈
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 100#define ERROR -1000000typedef struct Stack* _stack;struct Stack{ int element[MAXSIZE]; int top;};void InitStack(_stack ...原创 2018-10-01 11:00:35 · 295 阅读 · 0 评论 -
二分查找
二分查找又称折半查找,其效率较高。但是要求元素顺序为有序。这里以升序为例,每次都查找中间的值是否为想要查找的值,如果是则查找成功,如果中间的值比要查找的值大那么下一次查找左半部分,反之查找右半部份。如果查找失败返回-1,查找成功返回下标。#include <stdio.h>#include <stdlib.h>int BinarySearch(int arr...原创 2018-09-19 20:48:32 · 125 阅读 · 0 评论 -
最大连续子列和
最大连续子列和:已知有一个连续的数列,其值可正可负求其连续的最大子列之和。即数列为-1,0,2,3,-3,-4其最大子列和为2+3为5一:暴力法 O()每一次都计算从这个位置开始的所有的连续子列和中的最大值,最终求出其最大值。int maxSequence(int *ptr, int n){ int i, j; int max = ptr[0]; for (i = 1...原创 2018-09-17 22:16:40 · 484 阅读 · 0 评论 -
单链表插入指定位置元素
#include<stdio.h>#include<stdlib.h>#include<time.h>typedef struct Node { int num; struct Node *next;}Node;void print(Node L) //输出全部链表元素{ Node* p=L.next; while (p!=N...原创 2018-08-13 11:15:29 · 9043 阅读 · 1 评论 -
删除单链表指定位置的元素
#include<stdio.h>#include<stdlib.h>#include<time.h>typedef struct Node { int num; struct Node *next;}Node;void print(Node L) //输出全部链表元素{ Node* p=L.next; while (p!=N...原创 2018-08-13 10:57:47 · 4224 阅读 · 3 评论 -
输出单链表中指定位置元素
尾插法建立单链表后,输出整个链表元素,并输出指定位置元素#include<stdio.h>#include<stdlib.h>#include<time.h>typedef struct Node { int num; struct Node *next;}Node;void print(Node L) //输出全部链表元素{ ...原创 2018-08-13 10:30:08 · 4777 阅读 · 0 评论 -
尾插法建立单链表
链表在插入时有头插法和尾插法。这里使用尾插法建立单链表,并输出数据。#include<stdio.h>#include<stdlib.h>typedef struct Node { int num; struct Node *next;}Node;void print(Node L){ Node* p=L.next; while (p!=N...原创 2018-08-13 10:01:28 · 2417 阅读 · 0 评论 -
头插法建立单链表
线性表有顺序存储结构和链式存储结构。顺序存储结构在插入和删除元素时要做大量的数据移动,效率非常低。并且要占用一串连续的空间,存储空间只能预先分配,分配过大会造成空间浪费,分配过小会造成数据溢出。当然顺序存储结构也有其优点,这里不再赘述。链式存储结构在插入和删除时比较方便。链表在插入时有头插法和尾插法。这里使用头插法建立单链表,并输出数据。#include<stdio.h&g...原创 2018-08-12 11:57:24 · 1106 阅读 · 0 评论 -
时间复杂度
一般,算法中的基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间度量记作T(n)=O(f(n)),它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称时间复杂度。1.常量阶O(1)x++;x++执行1次,故它的时间复杂度为O(1)需要注意的是,这里的x++并没有受到问题规模n的影响而改变执行次数,即使有千百行x++也只...原创 2018-08-10 21:15:36 · 2250 阅读 · 0 评论