摘要:
中点画线算法程序 阅读全文
摘要:
将二叉树的两个孩子换位置,即左变右,右变左。不能用递归实现代码: 1 #include<stdio.h> 2 #include<stdlib.h> 3 typedef struct BiTNode{ 4 char data; 5 struct BiTNode *lchild,*rchild; 6 }BiTNode,*BiTree; 7 8 typedef struct QNode{ 9 BiTree t; 10 struct QNode *next; 11 }QNode,*QueuePtr; 12 typedef struct{ 13 QueuePtr front;// 阅读全文
摘要:
将单向链表reverse,如ABCD变成DCBA,只能搜索链表一次。 1 #include<stdio.h> 2 #include<stdlib.h> 3 typedef struct LNode{ 4 int data; 5 struct LNode *next; 6 }LNode,*LinkList; 7 void CreateList_L(LinkList &L,int n) 8 { 9 L=(LinkList)malloc(sizeof(LNode));10 L->next=NULL;//头结点11 LinkList p,q;12 p=L;13 . 阅读全文
摘要:
求2-2000的所有素数,有足够的内存,要求尽量快。普通的算法实现:#include<stdio.h>int main(){ for(int i=2;i<=20;i++) for(int j=2;j<=i;j++) { if((i%j==0)&&(j!=i)) break; else if(j==i) printf("%d\n",i); }}这代码很简单,但是时间复杂度大,效率低,需要优化在网上看到筛选法实... 阅读全文
摘要:
一个学生的信息是:姓名,学号,性别,年龄等信息,用一个链表,把这些学生信息连在一起,给出一个age,在链表中删除年龄等于age的学生信息。实现的代码: 1 #include<stdio.h> 2 #include<stdlib.h> 3 typedef struct Person{ 4 char name[20]; 5 char sex; 6 int no; 7 int age; 8 Person *next; 9 }Person,*studentlist;//现在看到typedef的作用了,真好,呵呵,一定要自己动手编程10 11 void creat... 阅读全文
摘要:
写一个程序,要求功能:求出用1,2,5这三个不同个数组合的和为100的组合个数。如:100个1是一个组合,5个1加19个5是一个组合。。。最容易想到的程序是: 1 #include<stdio.h> 2 int main() 3 { 4 int num=0; 5 for(int x=0;x<=100;x++) 6 for(int y=0;y<=50;y++) 7 for(int z=0;z<=20;z++) 8 if(x+2*y+5*z==100) 9 {10 ... 阅读全文
摘要:
整型数组int A[nSize],其中隐藏着若干个0,其余非0整数,写一个函数int Func(int *S,int size),使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素为0的下标。(尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路)。 1 #include<stdio.h> 2 #include<stdlib.h> 3 int Func(int a[],int size) 4 { 5 int temp;//用于交换数组的临时变量 6 int count1=0,count2=0;//用于统计0的个数 7 int ... 阅读全文
摘要:
编辑距离 关于两个字符串s1,s2的差别,可以通过计算他们的最小编辑距离来决定。 所谓的编辑距离: 让s1和s2变成相同字符串需要下面操作的最小次数。1. 把某个字符ch1变成ch22. 删除某个字符3. 插入某个字符例如 s1 = “12433” 和s2=”1233”; 则可以通过在s2中间插入4得到12433与s1一致。 即 d(s1,s2) = 1 (进行了一次插入操作)编辑距离的性质计算两个字符串s1+ch1, s2+ch2的编辑距离有这样的性质:1. d(s1,””) = d(“”,s1) = |s1| d(“ch1”,”ch2”) = (ch1 == ch2) ? 0 : 1;2. 阅读全文
摘要:
KMP算法可以再O(m+n)的时间数量级上完成串的模式匹配操作,对于普通的模式匹配的改进之处在于:每当一趟匹配过程中出现字符比较不等时,不需回溯指向主串的指针,而是利用已经得到的“部分匹配”的结果将模式向右“滑动”尽可能远的一段距离后,继续比较。看下具体的例子: i=3第一趟匹配 a b a b c a b c a c b a b a b c j=3 i=7第二趟匹配 a b a b c a b c a c b a b a b ca cj=5 i=11第三趟匹配 a b a b c a b c a c b a b (a) b c a c j=2 j=6设主串为‘s1s2...sn’,模式串为. 阅读全文
摘要:
键树有两种存储结构1)以树的孩子兄弟链表来表示键树,每个分支结点包括三个域,symbol域:存储关键字的一个字符;first域:存储指向第一棵子树根的指针;next域:存储指向右兄弟的指针。同时,叶子结点的infoptr域存储指向该关键字记录的指针。此时的键树又称双链树。用代码实现如下:(参考自:http://www.cnblogs.com/gentleming/archive/2010/08/18/1802390.html) 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 阅读全文