- 博客(40)
- 资源 (3)
- 收藏
- 关注
转载 两个鸡蛋测楼层
有限层数和蛋数,求即使最坏情况下需要的最少判断次数两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从一百层楼摔下来没事。有座100层的建筑,要你用这两个鸡蛋确定哪一层是鸡蛋可以安全落下的最高位置。可以摔碎两个鸡蛋。(参见两个鸡蛋--一道Google面试题)这是典型的动态规划问题。假设f[n]表示从n层楼找到摔鸡蛋不碎安全位置的最少判断次数。假设第一个鸡蛋第一次从第i层扔下,如
2012-10-17 15:24:37 3495
原创 判断素数
#include #includeint isprime(int n){int m;for(m=2;mif(n%m==0)return 0;}printf("%d ",n);}int main(){int n;for(n=2;nisprime(n);}return 0;}判断素数的算法很简单,但是老会忘了,所以还是记下来比较好
2012-10-10 16:14:28 298
原创 二叉树的存储
#include#define MaxSize 30using namespace std;typedef char elemtype;typedef struct node{ elemtype data; struct node *left,*right;}BTree;BTree *create(char *str){ BTree *b,*stac
2012-06-27 21:02:06 647 2
原创 快速排序
split(int a[],int low,int high,int &i){ int j,temp,t; i=low; j=high; t=a[i]; while(i { while(i i++; if(i { temp=a[i]; a[i]=a[j]; a[j]=temp; j--; } while(i=
2012-06-20 19:39:38 389
原创 快速排序的应用
对给定关键字的序号j,要求在无序记录a[0.....n-1]中找按关键字从小到大排在第j位上的记录,利用快速排序的划分思想设计上述算法 int split(int a[],int low,int high,int &i,int k){ int j,temp,t; i=low; j=high; t=a[i]; while(i { while(i
2012-06-20 16:00:55 593
原创 排序
利用以为数组a可以对n个整数进行排序。其中一种排序的算法的处理思想是:n个整数非别作为数组A的N个元素的值,每次(即第i次)从元素a【i】-A[N]中挑出最小的一个元素元素a[k],然后将a[k]和a[i]进行交换。这样反复n次完成排序。编写如上算法的函数。 void sort(int a[],int n){ int min,minj,i,j; for(i=0;i {
2012-06-20 11:45:53 298
原创 计数排序
有一种简单的排序算法,叫做计数排序。这种排序算法岁一个待排序的表进行排序,并将排序结果存放在另一个新的表中。必须注意的是,表中所有待排序的关键字互不相同。计数排序算法针对表中的每一个记录,遍历待排序的表一遍,统计表中有多少个记录的关键字比该记录的关键字小。假如针对某一个记录,统计出计数值为c,那么,这个记录在新的有序表中合适的存放位置即为c。void sort(int a[],int b[],
2012-06-20 11:39:37 1445
原创 归并有序表
对两个给定的有序表(均从小到大),设计一个算法将他们归并为一个有序表 void merge(int a[],int n,int b[],int m){ int i,t=0,l,k; for(i=0;i { int j=t; while(j { if(a[j] j++; else break; } if(j==
2012-06-19 10:54:34 319
原创 双向冒泡排序
编写一个双向冒泡排序算法,即在排序过程中以交替的正,反两个方向进行遍历,若第一趟吧关键字最大的记录放到最末尾,则在第二趟吧关键字最小的记录放到最前面。如此反复进行。 void dbubble(int a[],int i,int j,int flag){ int y,temp; if(i==j) return; if(flag==1) { for(y=i;y
2012-06-19 10:49:13 1528
转载 iostream与iostream.h的区别
C++中新定义的方法都是有名字空间的 比如cout就属于std名字空间如果include头文件的时候加上.h,默认会using namespace 否则需要自己加上 using namespace XXX 对于C中已经定义的方法如printf,没有影响的iostream.h是包含输入/输出流处理的头文件,iostream就什么都不是了但用iostream要加名词空间namespace#
2012-06-18 16:38:01 346
原创 查找 矩阵中行与列中均为最大或者最小的数
要求设计一个算法,设置m*n(m=3,n=3)的矩阵元素后,统计这个矩阵中具有以下特征的元素的个数,并输出他们的坐标及数值:他们既是所在行中的最小值又是所在列中的最小值,或者,他们既是所在行中的最大值,又是所在列中的最大值。 int findmax(int a[][3],int m,int i){ int max=a[i][0],maxj=0; for(int j=0;j
2012-06-18 15:30:27 1097
原创 螺旋方阵
一下是一个5*5阶的螺旋方阵,设计一个算法,输出该形式的n*n阶方阵12345161718196152425207142322218131211109void show(int R[][5],int n){ int k=1;
2012-06-18 10:53:02 706 3
原创 数组题目一
设数组R【】中的n个元素中有多个0元素,设计一个算法,将R中所有的非0元素一次移动到R数组的前端 void move(int R[],int n){ int i=0,j=n-1; while(i { if(R[i]>0) i++; else if(R[i]==0) { int t=R[i]; R[i]=R[j]; R[j--
2012-06-14 16:28:15 481
原创 删除字符串中的子串
利用串的基本运算,编写一个算法删除串s1中所有的s2子串 void index(strtype *s1,strtype *s2);void search(strtype *s1,strtype *s2,int i){ if(i>=len(s1)) return ; else { int k=i,j=0; int m=k; while(s1->ch
2012-06-14 15:28:15 529
原创 子串计数
编写一个函数,计算子串s2在主串s1中出现的次数 int search(strtype *s1,strtype *s2,int i,int y){ if(i>=len(s1)) return y; else { int k=i,j=0; while(s1->ch[k]==s2->ch[j] && j { k++; j++;
2012-06-14 15:26:52 433
原创 字符串间的替换
采用顺序存储方式存储串,编写一个指环函数,将串s1中的第i个字符开始的以第J个字符结束的字符构成的子川用s2进行替换,函数名为replace(s1,i,j,s2).例如replace("abcd",1,3,"xyz")返回"xyzd"strtype *replace(strtype *s1,int i,int j,strtype *s2){ if(ilen(s1)) { co
2012-06-14 15:26:11 634
原创 字符串判断子串
采用顺序结构存储串,编写函数,用于判定s2是否是s1的子串int search(strtype *s1,strtype *s2,int i){ if(i>=len(s1)) return 0; else { int k=i,j=0; while(s1->ch[k]==s2->ch[j] && j { k++; j++; } i
2012-06-14 15:25:31 544
原创 字符串的相关算法
#include#include#include#define MaxLen 20typedef struct{ char ch[MaxLen]; int len;}strtype;void create(strtype *s,char str[]){ strcpy(s->ch,str); s->len=strlen(str);}in
2012-06-14 15:24:48 333
原创 队列的应用题目
某机车轮渡口,过江渡船每次只能载10辆车过江。过江车辆分为客车类和货车类,上船有如下规定:同类车先到先上船,客车先于货车上船。且每上4条客车,才允许上一辆货车;若等待的客车不足4辆,则以货车代替,若没有货车等待则允许客车都上船。设计一个算法模拟渡口管理。 squeue *f(squeue *sq,char s[]){ squeue *p=(squeue *)malloc(10
2012-06-14 15:22:08 2146
原创 双向队列
一个双向队列是限定在两端end1,end2都可以进行插入删除操作的线性表。对空调间是end1=end2.若用顺序方式来组织双端队列,试根据下列要求,定义双端队列的结构,并给出指定端(i=1,2)进行插入和删除操作 #include#include#define MaxLen 6typedef char elemtype;typedef struct node{ el
2012-06-14 15:19:46 419
原创 有关循环队列
将队列的首尾相连构成一个环形区域,当在第n个位置进行元素的入队操作之后,下一个地址就“翻转”为1.采用这种方式的队列成为循环队列。 以入队为例要进行如下操作: 1.将队尾序号tail加1,即tail=tail+1 2.若tail=n+1,则tail=1; 其实以上两步可以用下面的表达式来表示:tail=(tail+1)%n.
2012-06-14 15:18:42 369
原创 队列的相关算法
#include#include#define MaxLen 20typedef char elemtype;typedef struct node{ elemtype data[MaxLen]; int front,rear;}squeue;void init(squeue *sq){ sq->front=0; sq->rear=0;}
2012-06-13 22:06:33 341
原创 利用栈判断括号的匹配性
typedef char elemtype;typedef struct stack{ elemtype data[MaxLen]; int top;}stack; stack *init(){ stack *p; p=(stack *)malloc(sizeof(stack)); p->top=0; return p;}int push
2012-06-13 22:05:55 277
原创 用栈判断字符串是否对称
typedef struct node{ char data; struct node *next;}cnode;cnode *create(){ cout cnode *head,*p,*s; p=(cnode *)malloc(sizeof(cnode)); head=p; s=p; s->next=NULL; char n; whi
2012-06-13 22:05:03 2743
原创 栈的问题(非递归)
f(n)=1,当n=0时f(n)=nf(n/2) 当n>0时要求写出求f(n)的非递归算法int f(int n){ int st[MaxLen][3]; int top=1; while(n>0) { st[top][2]=n; n=n/2; top++; } if(n==0) { st[top][1]=1; } whi
2012-06-13 22:04:02 400
原创 有关栈的算法
#include#include#define MaxLen 20/*typedef char elemtype;typedef struct stack{ elemtype data[MaxLen]; int top;}stack; stack *init(){ stack *p; p=(stack *)malloc(sizeof(stac
2012-06-13 22:03:09 303
原创 双循环链表的逆置
nodetype *invert(nodetype *head){ nodetype *p=head,*q,*s; if(p!=NULL) { q=p->next; head->next=head->left;/////逆置头结点 head->left=p->next; while(q!=head) { s=q->next; q->le
2012-06-13 22:02:21 5055
原创 双循环链表的相关算法
#include#includeusing namespace std;typedef int elemtype;typedef struct node{ elemtype data; struct node *left,*next;}nodetype;nodetype *create(){ cout nodetype *head,*p,*s
2012-06-13 22:00:53 2546 2
原创 判断两个单链表是否相交
一、判断链表是否存在环,办法为:设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表)程序如下:bool IsExitsLoop(slist* head){ slist * slow = hea
2012-06-13 21:59:40 335
原创 continue 与break的区别
在一具循环体中,如果用break返回, 则不管其后面是否有满足for中条件的情况,都不做for中的循环体,即不会做;如果用continue返回,如果条件满足执行continue, 跳出下面语句的执行,而返回到for 语句的开头,再次判断for中的条件,从而根据条件执行其中的循环体内容。简单地说,比如这样一个程序:for(...) {...continue/break;.
2012-06-13 21:58:30 230
原创 单链表相关算法
题目:编写一个算法,对值递增有序的单链表进行以下操作:若表中存在值为x的节点,则将它从表中删除,否则,就往表中插入一个值为x的节点,并保持值递增有序的性质不变(假设表中没有值相同的元素)nodetype *f(nodetype *head,elemtype x){ nodetype *p=head->next,*q,*s; q=(nodetype *)malloc(sizeof(n
2012-06-13 21:57:53 833
原创 continue 与break的区别
在一具循环体中,如果用break返回, 则不管其后面是否有满足for中条件的情况,都不做for中的循环体,即不会做;如果用continue返回,如果条件满足执行continue, 跳出下面语句的执行,而返回到for 语句的开头,再次判断for中的条件,从而根据条件执行其中的循环体内容。简单地说,比如这样一个程序:for(...) {...continue/break;.
2012-06-13 21:56:49 218
原创 求两个单链表的差
nodetype *minus(nodetype *h1,nodetype *h2){ nodetype *p,*q; p=h1->next; q=h2->next; if(p==NULL) return h2; if(q==NULL) return h1; while(q!=NULL) { p=h1->next; int i=1; w
2012-06-13 21:56:02 498
原创 单链表合并
nodetype* connect(nodetype* h1,nodetype* h2){ nodetype *h3,*h4,*head; if(h1==NULL) return h2; if(h2==NULL) return h1; head=h1; h3=h1->next; h4=h2->next; while(h3!=NULL && h4!=NUL
2012-06-13 21:55:08 254
原创 单链表逆置
nodetype *revers(nodetype *head){ nodetype *p,*q,*s; p=head->next; if(p==NULL || p->next==NULL) return head; int i=1; q=p->next; while(q!=NULL) { s=q->next; q->next=p; if(i
2012-06-13 21:54:23 241
原创 单链表相关算法
#include#includeusing namespace std;typedef int elemtype;typedef struct node{ elemtype data; struct node *next;}nodetype;nodetype *create(){ cout nodetype *head,*p,*s; p=
2012-06-13 21:53:14 782
原创 大数相加
#includeusing namespace std;void add(int n,int m,int s[],int a[],int t,int T[]){ int i,j; cout for(i=0;i cin>>s[i]; cout for(i=0;i cin>>a[i]; for(i=0;i T[i]=0; t=5; for
2012-06-13 21:49:44 243
原创 typedef用法总结
typedef,为现有数据类型创建一个新的名字。 typedef使用最多的就是创建易于记忆的类型名。类型出现在所声明的变量名字中。例如typedef int size;此处声明定义了一个int的同义字,名字为size。主义typedef并不是创建新的类型。它仅仅是为现有类型添加一个同义字,你可以在任何需要int的上下文中使用size。 typedef 还可以用来掩饰符合类型,例如
2012-06-13 21:48:37 341
原创 二叉树的先序,后序,层 的非递归遍历
void iter_preorder(BTree *p)//////先序非递归遍历{ BTree *stack[MaxLen]; int top=0;/////记录栈的头 while(p!=NULL || top>0) { while(p!=NULL)/////这个while循环是为了将树的左边的元素全部一次进栈 { coutdata stack[t
2012-06-13 21:47:06 1391 1
原创 二叉树的存储
typedef char elemtype;typedef struct node{ elemtype data; struct node *left,*right;}BTree;BTree *create(){ BTree *s,*t,*p[MaxLen]; int i=0,j; elemtype ch; while(cin>>ch && ch!='h
2012-06-13 21:45:07 265
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人