C
文章平均质量分 60
acsuperman
这个作者很懒,什么都没留下…
展开
-
字符串的学习(1)
C语言里并没有字符串这种数据类型,而是利用字符数组加以特殊处理(末尾加'\0')来表示一个字符串,事实上数据结构里的串就是一个存储了字符的链表,并且封装实现了各种字符串的常用操作。主要阐述 BF算法和KMP算法串的常用操作strcpy (s1, s2) 复制字符串,将s2的内容复制到s1,函数原型strcpy (char*, const char*),可以看出第二参数原创 2018-01-31 00:20:23 · 364 阅读 · 0 评论 -
队列的学习(2)
队列的实现上我们更愿意使用链式存储,这点与栈有所不同。链队列的结构为://链队列的存储结构为:typedef struct Node //节点的结构{ int data; struct Node *next;}QNode;typedef struct//链队列的结构{ QNOde *front,*rear; //队头,队尾指针}Linkqueu原创 2018-01-29 16:11:05 · 146 阅读 · 0 评论 -
哈夫曼编码
描述写一个哈夫曼码的编/译码系统,要求能对要传输的报文进行编码和解码。构造哈夫曼树时,权值小的放左子树,权值大的放右子树,编码时右子树编码为1,左子树编码为0. 输入输入表示字符集大小为n(n 输入串长小于或等于100的目标报文。 输出经过编码后的二进制码,占一行;以及对应解码后的报文,占一行;最后输出一个回车符。原创 2018-02-05 20:21:17 · 501 阅读 · 0 评论 -
C语言的函数传参汇总
首先一张图可以解决大部分问题:对于一维数组和二维数组的分析!非常重要①一维数组1:C语言中,当一维数组做函数参数时,编译器总是把它解析成一个指向其首元素的指针。2:实际传递的数组大小与函数形参指定的数组大小没有关系。然后举例说明:下面是一个元素交换函数,把数组array【i】和array【j】交换位置。注意看数组是怎么传递给函数的。正确的原创 2018-01-29 21:58:02 · 1049 阅读 · 0 评论 -
jump horse
描述:在国际象棋中,马的走法与中车象棋类似,即俗话说的“马走日”,下图所示即国际象棋中马(K)在一步能到达的格子(其中黑色的格子是能到达的位置)。现有一200*200大小的国际象棋棋盘,棋盘中仅有一个马,给定马的当前位置(S)和目标位置(T),求出马最少需要多少跳才能从当前位置到达目标位置。输入:本题包含多个测例。输入数据的第一行有一个整数N(1<=N<=1000),表...原创 2016-10-27 22:47:39 · 325 阅读 · 0 评论 -
穷举N为二进制数
描述:输入一个小于20的正整数n,要求按从小到大的顺序输出所有的n位二进制数,每个数占一行。输入:输入一个小于20的正整数n。输出:按从小到大的顺序输出所有的n位二进制数,每个数占一行。输入样例:3输出样例:000 001 010 011 100 101 110 111①:用回溯算法 --不撞南墙终不回#include<stdio.h>int n;int a[100];void...原创 2018-04-13 16:43:05 · 733 阅读 · 0 评论 -
01背包
描述需对容量为c 的背包进行装载。从n 个物品中选取装入背包的物品,每件物品i 的重量为wi ,价值为pi 。对于可行的背包装载,背包中物品的总重量不能超过背包的容量,最佳装载是指所装入的物品价值最高。输入多个测例,每个测例的输入占三行。第一行两个整数:n(n<=10)和c,第二行n个整数分别是w1到wn,第三行n个整数分别是p1到pn。 n 和 c 都等于零标志输入结束。...原创 2016-11-09 13:08:05 · 240 阅读 · 0 评论 -
装载问题
有两艘船,载重量分别是c1、 c2,n个集装箱,重量是wi (i=1…n),且所有集装箱的总重量不超过c1+c2。确定是否有可能将所有集装箱全部装入两艘船。输入:多个测例,每个测例的输入占两行。第一行一次是c1、c2和n(n<=10);第二行n个整数表示wi (i=1…n)。n等于0标志输入结束。输出:对于每个测例在单独的一行内输出Yes或No。输入样例:7 8 2 8 7 7 9 2 8 ...原创 2018-04-13 18:28:30 · 483 阅读 · 0 评论 -
大数算法-【加法,减法,乘法,除法】
1、大数加法 两个大数我们可以用数组来保存,然后在数组中逐位进行相加,再判断该位相加后是否需要进位,为了方便计算,我们将数字的低位放在数组的前面,高位放在后面。#include<stdio.h>#include<string.h>#define M 10000int main(){ char s1[M],s2[M]; int a[M],b[M]...原创 2018-04-19 20:31:40 · 1758 阅读 · 2 评论 -
全排列与素数环问题
结果:123412431324134214321423213421432314234124312413321432413124314234123421423142134321431241324123#include <iostream>#include <cstdio>#include<algorithm>using namespace std;voi...原创 2018-04-20 20:24:28 · 763 阅读 · 0 评论 -
队列的学习(1)
循环队列中,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等。因此,无法通过条件front==rear来判别队列是"空"还是"满"。解决这一问题有两种方法1.设置计数器判断2.--队满时:(rear+1)%n==front,队空时front=rear 队的长度通用公式(rear-front+maxsize)%maxsize原创 2018-01-29 00:40:57 · 368 阅读 · 0 评论 -
栈的学习(3)
栈学习中必做题--中缀表达式转换成后缀表达式(后缀表达式也叫逆波兰表达式)列如(a+b)--ab+首先用顺序存储来实现:#include#includechar stack[100]={'\0'};int compare(char s1,char s2);int isblock();void pop(int t);void push(char s,int i);int原创 2018-01-28 21:45:35 · 178 阅读 · 0 评论 -
字符串的学习(2)-KMP匹配算法
先看下图:从图中,我们可以很容易的发现,S不必回溯到S[1]的位置,T也不必回溯到T[0]的位置,因为前面的字符,S和T中都是相等的。如果S不回溯的话,那T该怎么办呢?我们也可以很容易的发现,S中5、6、7号字符和T中0、1、2号字符是相等的。故T直接回溯到T[3]的位置即可。此时我们就省去了很多不必要的回溯和比较。那么这些都是我们从图中直观得出的结论,如果换做其他字符,我们又原创 2018-01-31 16:33:38 · 148 阅读 · 0 评论 -
链表的重新学习
链表的创建:两种方法:①头插法:每一次插入的数据永远在第一个位置。(生成的次序和输入的次序相反)p->next=head->next;head->next=p;②尾插法:与输入的次序相同r=head;{r->next=p;r=p;}r->next=NULL;//在最后将尾节点的指针域为空链表的销毁:p=head->next;while(p)//p不为空原创 2018-01-24 23:36:55 · 275 阅读 · 0 评论 -
链表的学习(2)
魔术师发牌问题: 魔术师手中有A、2、3……J、Q、K十三张黑桃扑克牌。在表演魔术前,魔术师已经将他们按照一定的顺序叠放好(有花色的一面朝下)。魔术表演过程为:一开始,魔术师数1,然后把最上面的那张牌翻过来,是黑桃A;然后将其放到桌面上;第二次,魔术师数1、2;将第一张牌放到这些牌的最下面,将第二张牌翻转过来,正好是黑桃2;第三次,魔术师数1、2、3;将第1、2张牌依次放到这些牌的最下面,将第三张原创 2018-01-26 17:01:29 · 139 阅读 · 0 评论 -
链表的学习(3)
双向链表:有一个前驱指针和后继指针---利用空间来换取时间的一种数据结构typedef struct two{ int a; struct two *next; struct two *prior;}NODE;双向链表的创建-头插法:NODE *head,*s;head=(NODE *)malloc(sizeof(NODE));head->next=he原创 2018-01-26 21:01:54 · 180 阅读 · 0 评论 -
栈的学习(1)
#include #include //自己实现栈--当时数据结构期末考试机式的一道题!!!!typedef struct remedy{ int a[100]; int top;}sqstack;int main(){ int n,i,count=0,m; sqstack s; s.top=-1; int c[100],b[100];原创 2018-01-27 20:38:03 · 201 阅读 · 0 评论 -
二叉树的学习
树定义 树(tree)是包含n(n>0)个结点的有穷集,其中: (1)每个元素称为结点(node); (2)有一个特定的结点被称为根结点或树根(root)。 (3)除根结点之外的其余数据元素被分为m(m≥0)个互不相交的集合T1,T2,……Tm-1,其中每一个集合Ti(1 树也可以这样定义:树是由根结点和若干颗子树构成的。树是由一个集合以及在该集合上定原创 2018-02-03 21:40:14 · 290 阅读 · 0 评论 -
栈的学习(2)
利用栈来实现括号匹配:虽然括号匹配用数组实现比较简单,既然学习了栈,就应该用一下;#include #include #define STACKSIZE 20typedef struct{ char *base; char *top; int stacksize;}sqstack;void initstack(sqstack *s){原创 2018-01-28 14:48:04 · 183 阅读 · 0 评论 -
归并排序分析
归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。网上一张图可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解...原创 2018-09-01 13:15:03 · 277 阅读 · 0 评论