c语言
超级呆呆
这个作者很懒,什么都没留下…
展开
-
顺序表-改(移动)
例:数据表data={3,2,5,8,4,7,6,9}无序不重复(要求:将第一个元素移至最后) ①赋值式移动 void Move(int data[],int n){ int x=data[0]; int i; for(i=1;i<n;i++) { data[i-1]=data[i]; } data[i-1]=x;}②交换式移动原创 2017-08-16 21:15:22 · 252 阅读 · 0 评论 -
顺序表-查
注:初学不考虑程序的鲁棒性,健壮性等等。1).数据集合没有重复值且无序 例:设有数据集合data={3,2,5,8,4,7,6,9}给定一个关键字key在数据集合中查找关键字key的数据元素的下标,若未找到返回-1 int FoundKey(int data[],int n,int key){ int i; for(i=0;i<n && data[i]!=key原创 2017-08-16 16:41:18 · 244 阅读 · 0 评论 -
贪心算法
贪心准则: ①将一个问题的n步的每一步抽象出公共的最优解 ②一个问题只有一个贪心准则,问题在求解时贪心准则不许改变。 ☆特点:不一定产生最优解,但,简单,快速。装箱问题问题描述: ①有n个物品,体积V1,V2,V3…Vn ②有若干个体积为V的箱子。 要求:将n个物品全部装入箱子中,打开的箱子尽量少。 贪心准则: ①降所有物品按体积按降序排列 ②按开箱顺序遍原创 2017-08-30 20:01:23 · 3102 阅读 · 0 评论 -
类间通信-通过指向对象的指针
例1: ①#includeusing namespace std;class A{private:int x;public: A() { this->x=0; } A(int x) { this->x=x; } void fun() { cout"x="<<x<<end原创 2017-08-29 21:26:10 · 233 阅读 · 0 评论 -
查找算法
注:后续,继续补充。1)顺序查找> 1.适用:顺序表,链表。> 2.方式:在某一个数据集合中从第一个元素开始,依次向后查找。例:设有一数据集合{3,2,5,8,4,7,6,9}给定某个关键字key,在数据集合中查找key对应的元素。 ①顺序表int Search(int data[],int n,int key){ int tag=-1; for(int i=0;i<n &原创 2017-08-25 13:53:26 · 202 阅读 · 0 评论 -
排序算法
1)插入类排序插入排序:向有序区间中插入一个元素的过程。 直接插入排序:如:[ 3 ] [ 2 5 8 4 7 6 ]①[ 2 3 ] [ 5 8 4 7 6 ]②[ 2 3 5 ] [ 8 4 7 6 ]③[ 2 3 5 8 ] [ 4 7 6 ]④[ 2 3 4 5 8 ] [ 7 6 ]⑤[ 2 3 4 5 7原创 2017-08-26 18:28:20 · 227 阅读 · 0 评论 -
二叉树-创建和遍历
1)创建二叉树(链式)//创建二叉树BTNode * CreateBTree(int data[],int n){ BTNode *root,*p,*pa,*c;//root根结点,p新结点,c寻找p要放的位置,pa为c的前驱 //创建根结点 root=(BTNode *)malloc(sizeof(BTNode)); root->data=data[0];原创 2017-08-28 12:57:22 · 272 阅读 · 0 评论 -
单向链表-查找和删除
1)查找例:在一个非空单向链表(数据域值不重复)查找值为key的结点,并返回结点地址,若未找到返回NULL。原创 2017-08-21 23:47:17 · 1113 阅读 · 0 评论 -
二叉树
1. 树(Tree):非线性数据结构。(包括树和图)①树的数据结构: 根结点(root):树中没有前驱的结点。(☆一颗树只有一个根结点) 叶子结点(leaf):树中没有后继的结点。②双亲结点,子女结点:分别为一节点的前驱和后继。 ☆根结点无双亲,叶子结点无后继。 ☆除根结点外,剩余所有结点向上只有一个双亲。 ☆除叶子结点外,剩余结点向下可原创 2017-08-27 16:30:41 · 299 阅读 · 0 评论 -
单向链表-遍历(查找)
①输出单向链表尾结点的值。(非空链表) ②输出单向链表结点个数。 ③输出单向链表,结点值为奇数的结点个数。(数据域正整数) ④输出单向链表,结点值最大的值。 ⑤ 逆向输出单向链表数据域的值。 //①输出单向链表尾结点的值。(非空链表) int TialNode(ElemSN *head){ for(ElemSN *p=head;p->next;p=p->next原创 2017-08-21 22:39:28 · 895 阅读 · 0 评论 -
单向链表-移动
例:设head指向一非空单向链表,将该单向链表逆置(不产生新链表) ElemSN * ReverseNode(ElemSN *h){ ElemSN *p,*q; p=h->next; h->next=NULL; while(p) { q=p; p=p->next; q->next=h; h=q原创 2017-08-24 19:56:58 · 994 阅读 · 0 评论 -
单向链表-创建
1)正向建链——方式1:#include<stdio.h>#include<stdlib.h>//结点声明typedef struct node{ int data; struct node *next;}ElemSN;//单向链表的创建ElemSN * CreateLink(int a[],int n){ ElemSN *h,*t,*p;//t始终指向链表的尾原创 2017-08-21 17:28:36 · 360 阅读 · 0 评论 -
链表
1)链式储存:在内存中不用连续的储存单元实现链式储存。 设数据集合 date={3,2,5,8,4,7,6,9}; 顺序表: 链 表: 链表优点:利用零散的空间;缺点:浪费空间2)用链式存储一个数据集合的数据 例数据集合: 术语: ⅰ.头结点:单向链表中,无前 ⅱ ⅲ原创 2017-08-21 16:52:21 · 133 阅读 · 0 评论 -
结构体
结构体:结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合。ⅰ复合性:结构体单元可以储存不同数据类型。ⅱ是一种自定义类型。ⅲ使用:定义类型——>通过类型分配结构体单元——>使用单元。1)声明机构体类型:struct 结构体名{ 数据类型 成员1; 数据类型 成员2; .....};说明:原创 2017-08-20 11:59:18 · 208 阅读 · 0 评论 -
全排列
排列:从n个元素中任取m(m<=n)个元素,并按照一定顺序排,称为排列 全排列:所有的n个元素,按照一定顺序排,称为全排列 1)递归法 ①如图的排列枚举树,以{1,2,3}的全排列为例 算法思路: ⑴n个元素的全排列=前缀固定为a[0]和剩余(n-1)个元素全排列+ 前缀固定为a[1]和剩余(n-1)个元素全排列+ 前缀固定为a[2]和剩余(n-1)个元素全排列+原创 2017-08-18 20:52:11 · 248 阅读 · 0 评论 -
顺序表-增(插入)
1)例:设数据集合data={2,5,7,8,10,14,16},升序有序,将某个关键字key,插入到数据集合中,使其依然有序。①int JosephRing(int data[],int n,int key){ int i,j; for(i=0;i<n && data[i]<key;i++); for(j=n;j>i;j--) { data[j]=原创 2017-08-18 18:23:38 · 292 阅读 · 0 评论 -
顺序表-删
1)删除数据集合data中一个或若干个元素 (无重复值)int Delete(int data[],int n,int key){ int i,j; for(i=0;i<n && data[i]!=key;i++); if(i!=n) { for(j=i;j<n-1;j++) { data[j]=data[j+原创 2017-08-18 12:04:35 · 323 阅读 · 0 评论 -
剑指offer:两个链表第一个公共结点
题目:输入两个链表,找出它们的第一个公共结点 小编:提供一种用for来解的思路清晰的方法public:ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { if(pHead1==NULL || pHead2==NULL) return NULL; int cnt=0;...原创 2018-02-23 22:23:18 · 162 阅读 · 0 评论