自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

驰骋草原的代码

做出让自己感动的成绩!

  • 博客(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关注的人

提示
确定要删除当前文章?
取消 删除