关于单链表,二叉树,图,查找和排序的软件编程

课程名称:计算机软件

使用软件:devcpp

注意:这里列出了关于单链表,二叉树,图,查找和排序的编程,全部程序由博主一人编写,会有瑕疵,谨慎使用。

1.单链表

要求:(1)建立单向链表,表长任意;

           (2)可交互输出单链表中的内容;

           (3)编写算法计算出自己所建单链表的长度并输出;

           (4)删除自己所建单链表中的第K个结点,并将剩余结点输出;

           (5)将单链表倒排,输出结果。

程序:

#include <stdio.h> 
#include <stdlib.h>

//定义链表中的节点 
struct node
{  unsigned char data;//链表中的数据 
   struct node * next;//指向下一节点的指针 
};

//变量定义
struct node  *p,*p1,*p2,*head;

//函数声明
void ListCreate();
void ListTraverse();
void ListLength();
int ListDelete();
int ListReverse();

//主函数 
int main()
{
 ListCreate();        //单向链表的建立
 ListTraverse();      //单向链表的输出
 ListLength();        //单向链表长度计算
 ListDelete();        //单向链表结点的删除
 ListReverse();      //单链表的倒排 
}

//单向链表的建立
void ListCreate()
{   
    head=p=(struct node * )malloc(sizeof(struct node));
 printf("请输入链表数据元素值(0为结束标志,中间不能用任何符号):\n"); 
    scanf("%c",&p->data);//头结点的数据成员 
    while(p->data!='0')//给出0结束条件,退出循环
    {   
   p1=p; 
      p=(struct node * )malloc(sizeof(struct node)); 
      scanf("%c",&p->data);//中间结点数据成员
      p1->next=p;//中间结点的指针成员值
    } 
    p->next=NULL;//尾结点的指针成员值 
}

//单向链表的输出
void ListTraverse()

    p=head;
    printf("\n链表数据成员是:"); 
    while(p->next!=NULL) 
    { 
      printf("%c  ",p->data);  //输出成员数据
      p=p->next; 
    }   
}

//单向链表长度计算
void ListLength()
{
    p2=head->next;
    int  j=1;            //j用来存放链表的长度
    while((p2->data)-48)
    {
      p2=p2->next;
      j++;
    }
    printf("\n链表长度是:  %d",j);
}

//单向链表结点的删除
int ListDelete()
{
    p2 = head;

    int j = 1,M,K;
   
    printf("\n要删除第几个节点: ");
 scanf("%d",&K);

    if ( j > (K-1)) //删除头节点
   {
      struct node  *p3;
      p3=p2;
      p2=p3->next;
    }
    else   //删除其它节点
    {
    while ((p2->next)-48 && j < (K-1))
 {
        p2 = p2->next;
        ++j;
    }
     if (p2->next == NULL )
 {
        printf("Position Error\n");
        return 0;
    }
    struct node *temp = p2->next;  //执行删除操作
    p2->next = temp->next;
    }   
    p=head;
    printf("删除后的链表数据成员是:"); 
    while(p->next!=NULL) 
    { 
      printf("%c  ",p->data);  //输出成员数据
      p=p->next; 
    } 
}

//单链表的倒排
int ListReverse()
{
    struct node *h,*h1,*h2;
    h=head;
    h1=h;                    
    h=NULL;
    while(h1->next!=NULL)      //通过循环使h从最后一个元素依次向前
    { 
        h2 = h1->next; 
        h1->next = h; 
        h = h1; 
        h1 = h2;
    }  
    printf("\n倒排后的链表数据成员是:"); 
    while(h!=NULL)  //输出数据元素
    { 
      printf("%c  ",h->data); 
      h=h->next; 
    }  
}

 

难点:单链表的倒排,这里有两种方法实现

1)逆序单链表的循环算法:

 1 LINK_NODE *ReverseLink(LINK_NODE *head)2     {3         LINK_NODE *next;  4 LINK_NODE *prev = NULL;  5  6 while(head != NULL)  7  {  8 next = head->next;  9 head->next = prev; 10 prev = head; 11 head = next; 12  } 13 14 return prev; 15 }

2)逆序单链表的递归算法:

 1 LINK_NODE *ReverseLink2(LINK_NODE *head)2    {3         LINK_NODE *newHead;  4  5 if((head == NULL) || (head->next == NULL))  6 return head;  7  8 newHead = ReverseLink2(head->next); /*递归部分*/  9 head->next->next = head; /*回朔部分*/ 10 head->next = NULL; 11 12 return newHead; 13 }

循环还是递归?这是个问题。当面对一个问题的时候,不能一概认为哪种算法好,哪种不好,而是要根据问题的类型和规模作出选择。对于线性数据结构,比较适合用迭代循环方法,而对于树状数据结构,比如二叉树,递归方法则非常简洁优雅。原文链接:https://blog.csdn.net/lycnjupt/article/details/47103433

如果想了解关于逆序单链表的其它实现方法,可以查看链接:

http://blog.sina.com.cn/s/blog_68e4d2910100tc0i.html

 

2.二叉树

要求:(1)动态交互建立二叉树,结点个数任意;

           (2)分别用DLR,LDR,LRD三种方式对二叉树进行遍历,并输出结果;

           (3)计算二叉树中的结点个数并输出;

           (4)计算二叉树的深度并输出。

我自己的程序:

#include <stdio.h>
#include <stdlib.h>

//节点声明,数据域、左指针、右指针
typedef struct BiTNode
{
   int data;//二叉树数据元素
   struct BiTNode *Left,*Right;//二叉树左右指针
}BiTNode,*BiTree;

//函数声明
int CreateBiTree(BiTNode **T);
void DLR_BiTree(BiTNode *T);
void LDR_BiTree(BiTNode *T);
void LRD_BiTree(BiTNode *T);
int BiTreeCount(BiTNode *T);
int BiTreeDeep(BiTNode *T);

//主函数
int main()
{
   BiTree T;
   int depth,Count = 0;
  
   printf("请输入第一个节点的值(0表示没有该节点): ");
   CreateBiTree(&T);//二叉树建立
   printf("\n");
  
   printf("先序遍历二叉树:");
   DLR_BiTree(T);//二叉树先序遍历
   printf("\n");
  
   printf("中序遍历二叉树:");
   LDR_BiTree(T);//二叉树中序遍历
   printf("\n");
  
   printf("后序遍历二叉树:");
   LRD_BiTree(T);//二叉树后序遍历
   printf("\n");
  
   Count = BiTreeCount(T);//求二叉树结点个数  
   printf("二叉树结点个数:%d\n",Count); 
  
   depth = BiTreeDeep(T);//求二叉树深度 
   printf("二叉树的深度为:%d\n",depth);
}

//先序创建二叉树 
int CreateBiTree(BiTNode **T) 

    int ch; 
    scanf("%d",&ch);//给二叉树第一个节点赋值 
    if (ch == 0) 
    { 
        *T = NULL;  //输入为0表示没有该节点
        return 0; 
    } 
    else 
    { 
        *T = (BiTNode *)malloc(sizeof(BiTNode));  //给二叉树节点分配内存
        if (T == NULL) 
        { 
            printf("failed\n"); 
            return 0; 
        } 
        else 
        { 
            (*T)->data = ch; 
            printf("输入%d的左子节点:",ch); 
            CreateBiTree(&((*T)->Left));  //递归给二叉树左节点赋值
            printf("输入%d的右子节点:",ch); 
            CreateBiTree((&(*T)->Right)); //递归给二叉树右节点赋值
        } 
    } 
 
    return 1; 
}

//二叉树先序遍历
void DLR_BiTree(BiTNode *T)
{
 if( T == NULL) return;//递归调用的结束条件
 printf("%d",T->data);//访问节点的数据域
 DLR_BiTree(T->Left);//先序递归遍历左子树
 DLR_BiTree(T->Right);//先序递归遍历右子树
}

//二叉树中序遍历
void LDR_BiTree(BiTNode *T)
{
 if(T==NULL) return;//递归调用的结束条件
 LDR_BiTree(T->Left);//中序递归遍历左子树
 printf("%d",T->data);//访问节点的数据域
 LDR_BiTree(T->Right);//中序递归遍历右子树
}

//二叉树后序遍历
void LRD_BiTree(BiTNode *T)
{
 if(T==NULL) return;//递归调用的结束条件
 LRD_BiTree(T->Left);//后序递归遍历左子树
 LRD_BiTree(T->Right);//后序递归遍历右子树
 printf("%d",T->data);//访问节点的数据域
}

//求二叉树结点个数
int BiTreeCount(BiTNode *T)
{
    if(T==NULL)
        return 0;//空二叉树结点数为0
    else                           
        return BiTreeCount(T->Left)+BiTreeCount(T->Right)+1;//左右子树结点总数加1
}
 
//求二叉树深度
int BiTreeDeep(BiTNode *T) 

    int deep = 0; 
    if (T != NULL) 
    { 
        int leftdeep = BiTreeDeep(T->Left);//递归得到左子树深度 
        int rightdeep = BiTreeDeep(T->Right);//递归得到右子树深度
        deep = leftdeep >= rightdeep?leftdeep+1:rightdeep+1;//比较得到二叉树深度 
    } 
 
    return deep; 

 

3.图

要求:(1)根据教材上算法,完成图的深度和广度优先遍历,要求任意给定起始点,输出结果。

          (2)根据教材上算法,完成图的单元最短路径的算法,要求任意给定源点,输出结果。

程序:

#include <stdio.h>
#include <stdlib.h>#define MAXVEX  100                      //最大顶点数  
#define INFINITY 65535                //用65535来代表无穷大  //定义访问标记 
int visited[MAXVEX]={0};  //定义图结构体  
typedef struct  
{  char vexs[MAXVEX];                //顶点表  int  arc[MAXVEX][MAXVEX];         //邻接矩阵,可看作边  int  numVertexes, numEdges;       //图中当前的顶点数和边数  
}Graph;   //辅助数组中的元素定义  
typedef struct 
{  int distance;  int path[MAXVEX];  
}ArrayNode;//函数声明
void CreateGraph(Graph *g);
void DFS(Graph g,int v);
void BFS(Graph g,int v);
void SHORT(Graph *g,int from,int to);
void SHORT(Graph *g,int from,int to);//主函数 
int main()
{Graph g;int i,from,to;printf("t为1-4,分别表示无向图、有向图、带权无向图、带权有向图\n");CreateGraph(&g);//创建图 printf("\n输入遍历起点: ");  scanf("%d",&i);  printf("\n深度优先搜索遍历:");DFS(g,i);//深度优先遍历函数 printf("NULL\n");printf("广度优先搜索遍历:"); BFS(g,i);//广度优先遍历函数 printf("NULL\n");printf("\nDijkstra算法单元最短路径:");printf("\n请输入起点和终点(中间用空格):");scanf("%d %d",&from,&to);SHORT(&g,from,to);//Dijkstra算法单元最短路径函数	
}//创建图  
void CreateGraph(Graph *g)  
{    int i,j,k,w,t;  printf("输入顶点数,边数和t(中间用空格):");  scanf("%d %d %d", &(g->numVertexes), &(g->numEdges),&t);  printf("\n");  for(i=1;i<=g->numVertexes;i++)//通过循环输入顶点信息  {  getchar();  printf("输入第%d顶点信息vexs[%d]=",i,i);  scanf("%c",&(g->vexs[i]));  }  printf("\n");  for(i=1;i<=g->numVertexes;i++)  for(j=1;j<=g->numVertexes;j++)  if (t>2)    g->arc[i][j] = INFINITY;//区别是否带权值  else        g->arc[i][j]=0;   for(k=1;k<=g->numEdges;k++)//通过循环输入边的信息  {  printf("输入有联系的两个顶点(中间用空格):");  scanf("%d %d",&i,&j);  if(i>g->numVertexes ||j>g->numVertexes)  exit(0);  if(t>2)  {  printf("输入权值:");  scanf("%d",&w);  g->arc[i][j]=w;  if(t==3)  g->arc[j][i]=w;  }  else  {     g->arc[i][j]=1;  if (t==1)    g->arc[j][i]=1;  }  }  printf("\n");  printf("输出邻接矩阵:\n");  for(i=1;i<=g->numVertexes ;i++)  {  for(j=1;j<=g->numVertexes ;j++)  {  printf("%8d",g->arc[i][j]);  //输出邻接矩阵 /*if(t>2&&g->arc[i][j]==65535)  g->arc[i][j]=0;  else if(t>2&&g->arc[i][j]!=65535)  g->arc[i][j]=1; */ }  printf("\n");  }  
}  //深度优先遍历
void DFS(Graph g,int v)
{int j;  printf("%d->",v);         //输出访问顶点  visited[v]=1;            //全局数组访问标记置1表示已经访问  for(j=1; j<=g.numVertexes; j++)  if ((g.arc[v][j]!=0)&&(g.arc[v][j]!=65535)&&(!visited[j]))  DFS (g,j);//递归访问非0非无穷顶点 
} //广度优先遍历
void BFS(Graph g,int v)
{int  q[g.numVertexes+1] ;  int  i,f,r,j ;for(i=0;i<g.numVertexes;i++)visited[i]=0;  //重置访问标记 f=r=0 ;  printf("%d->",v);//输出第一个顶点  visited[v]=1 ;//标记已访问  r++;  q[r]=v;  while (f<r)  {    f++; v=q[f];  for (j=1; j<=g.numVertexes; j++) //广度优先遍历依次访问与上一顶点有联系的点 {if ((g.arc[v][j]!=0)&&(g.arc[v][j]!=65535)&&(!visited[j]))  {       printf("%d->",j);//输出访问顶点 visited[j]=1 ;     r++; q[r]=j ;  }}  }  
} //单元最短路径算法
void SHORT(Graph *g,int from,int to)
{int i,j,index=-1;  int n=1;//记录已经求出的两个点之间的最短距离的个数  ArrayNode shortestPath[MAXVEX];  int flag[MAXVEX]={0};//标记,为1表示到这个顶点的最短距离已求出  //1.求from到各个顶点的直接距离,即初始化shortestPath数组  for(i=1;i<=g->numVertexes;i++){  if(from==i){  shortestPath[i].distance=0;  shortestPath[i].path[0]=i;  flag[from]=1;  }  else if(g->arc[from][i]>0){  shortestPath[i].path[0]=from;  shortestPath[i].path[1]=i;  shortestPath[i].distance=g->arc[from][i];  }else shortestPath[i].distance=INFINITY;  }  //2.每次求一个最短路径  while(n<=g->numVertexes){  //选择shortestPath中距离最小的,求出from到这个顶点的最短路径  index=-1;  for(i=1;i<=g->numVertexes;i++){  if(i==from)  continue;  if(flag[i]==0 && index==-1 && shortestPath[i].distance!=INFINITY)  index=i;  if(flag[i]==0 && index!=-1 && shortestPath[i].distance<shortestPath[index].distance)  index=i;  }  flag[index]=1;  //修改到各个顶点的最短路径  for(i=1;i<=g->numVertexes;i++){  if(i==from)  continue;  if(g->arc[index][i]>0 && g->arc[index][i]+shortestPath[index].distance<shortestPath[i].distance){  shortestPath[i].distance=g->arc[index][i]+shortestPath[index].distance;  //修改路径  j=0;  while(1){  shortestPath[i].path[j]=shortestPath[index].path[j];  if(shortestPath[index].path[j]==index)  break;  j++;  }  shortestPath[i].path[j+1]=i;  }  }  n++;  }  //输出from到to的最短路径及长度  if(shortestPath[to].distance==INFINITY){  printf("%d到%d没有路径\n",from,to);  return;  }  printf("%d到%d的最短路径长度是:%d\n",from,to,shortestPath[to].distance);  printf("经过的顶点:  ");  i=0;  while(1){  printf("%-3d",shortestPath[to].path[i]);  if(shortestPath[to].path[i]==to)  break;  i++;  }  printf("\n");
} 

4.查找和排序

要求:(1)任意给定无序序列,用对半检索法,交互检索任意给定的关键字KEY;

           (2)任意给定无序序列,用快速排序法对序列进行排序,并统计交换次数;

           (3)任意给定无序序列,用冒泡排序法对序列进行排序,并统计交换次数和排序趟数。

程序:

#include "stdio.h"
#define N 6//序列长度(可修改)//函数声明 
int halfSort(int *b,int n); 
void quickSort(int *b,int l,int r);
void bubbleSort(int *bb,int r);//全局变量定义 
int o,p,k;
int KEY; //检索的关键字 //主函数 
int main()
{int i,j,q;int a[100],aa[100],aaa[100];//以数组方式定义序列 printf("Hello World!\n");printf("\n1.请输入任意序列(用回车隔开)\n");for(i=1;i<=N;i++)scanf("%d",&a[i]);//输入无序序列 quickSort(a,1,N);//先排序再进行对半检索printf("排序后序列为:");for(j=1;j<=N;j++)printf("%d ",a[j]);//输出有序序列 printf("\n请输入需要检索的关键字KEY:"); scanf("%d ",&KEY);q=halfSort(a,N);//对半检索函数调用 printf("对半检索-关键字位置为:%d\n",q);printf("\n2.请输入任意序列(用回车隔开)\n");for(i=0;i<N;i++)scanf("%d",&aa[i]);//输入无序序列 quickSort(aa,0,N-1);//快速排序函数调用 printf("快速排序后序列为:");for(j=0;j<N;j++)printf("%d ",aa[j]);//输出有序序列 printf("\n交换次数为:%d\n",k);printf("\n3.请输入任意序列(用回车隔开)\n");for(i=0;i<N;i++)scanf("%d",&aaa[i]);//输入无序序列 bubbleSort(aaa,N);printf("冒泡排序后序列为:");//冒泡排序函数调用 for(j=0;j<N;j++)printf("%d ",aaa[j]);//输出有序序列 printf("\n交换次数为:%d\n",o);printf("排序趟数为:%d\n",p);return 0; 
}//对半检索函数 
int halfSort(int *b,int n)
{int high,mid,low;int rs=0;low=1;high=n;//初始状态 while(low<=high)//判断查找是否结束 {mid=(low+high)/2;if(KEY<b[mid]) high=mid-1;//关键字在前半区 elseif(KEY>b[mid]) low=mid+1;//关键字在后半区 else {rs=mid;break;}}return rs;
}//快速排序函数 
void quickSort(int *bb,int l,int r)
{int m,n;int temp;if(l>=r) return;//只有一个记录或无记录,无须排序 m=l;n=r;temp=bb[m];while(m!=n)//寻找temp的最终位置 {while((bb[n]>=temp)&&(n>m))n--;//从右向左扫描,查找第一个小于temp的记录 if(m<n){bb[m++]=bb[n];k++;}while((bb[m]<=temp)&&(n>m))m++;//从左向右扫描,查找第一个大于temp的记录 if(m<n){bb[n--]=bb[m];k++;}}bb[m]=temp;//找到temp的最终位置 quickSort(bb,l,m-1);//递归处理左区间 quickSort(bb,m+1,r);//递归处理右区间 
}//冒泡排序函数 
void bubbleSort(int *bbb,int r)
{int m,n,noswap;int temp;for(m=0;m<(r-1);m++)//外循环,做N-1次起泡 {noswap=1;for(n=0;n<(r-m-1);n++)//内循环,置交换标志 if(bbb[n+1]<bbb[n])//比较 {temp=bbb[n];bbb[n]=bbb[n+1];bbb[n+1]=temp;//交换 o++;noswap=0;}if(noswap) break;//本趟起泡未发生记录交换,算法结束 p++;}
}

  

转载于:https://www.cnblogs.com/BoBoRing/p/8886094.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398206.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pcie 的function_PCIe扫盲——BDF与配置空间

前面的文章中介绍过&#xff0c;每一个PCIe设备可以只有一个功能(Function)&#xff0c;即Fun0。也可以拥有最多8个功能&#xff0c;即多功能设备(Multi-Fun)。不管这个PCIe设备拥有多少个功能&#xff0c;其每一个功能都有一个唯一独立的配置空间(Configuration Space)与之对应…

微信二维码扫描下载APK

前几天给客户制作的app需要上线&#xff0c;生成二维码扫描进行下载&#xff0c;把生成好的apk挂在服务器端&#xff0c;将地址复制下来&#xff0c;通过草料二维码&#xff08;http://cli.im/&#xff09;生成一个二维码它需要一个应用宝ID。上传到应用宝&#xff0c;光审批就…

mysql 字段 as_mysql 字段as详解及实例代码

mysql 字段使用as在mysql中&#xff0c;select查询可以使用AS关键字为查询的字段起一个别名&#xff0c;该别名用作表达式的列名&#xff0c;并且别名可以在GROUP BY&#xff0c;ORDER BY或HAVING等语句中使用。例如&#xff1a;SELECT CONCAT(last_name,, ,first_name) AS ful…

dubbo接口快速测试技巧

在分布式系统的开发中&#xff0c;用到了dubbozookeeper技术&#xff0c;最近遇到一个问题&#xff0c;产品上线后&#xff0c;我负责的模块出了问题&#xff0c;某个bean中某个字段的值一直为null&#xff0c;而这个bean是我调用注册在zookeeper上的一个服务查询到的&#xff…

跳出多重循环 JS

关于如何跳出多重循环loop: //循环标记for(var key in jsonObj){for(var i0;i<jsonObj[key].length;i){if(jsonObj[key][i].password123456){break loop;//跳出双重循环 }}}转载于:https://blog.51cto.com/9381188/1790457

webservice引用spring的bean

1 <jaxws:endpoint address"/test/webservice" implementor"#testBean" /> 这行代码里面的#号表示webservice自动装配到spring的bean。转载于:https://www.cnblogs.com/xiluhua/p/4472544.html

mysql 5.0 数据库_mysql5.0常用命令

MySQL常用操作基本操作&#xff0c;以下都是MySQL5.0下测试通过首先说明下&#xff0c;记住在每个命令结束时加上&#xff1b;(分号)1.导出整个数据库mysqldump -u 用户名 -p --default-character-setlatin1 数据库名 > 导出的文件名(数据库默认编码是latin1)mysqldump -u w…

IISASP.NET 站点IP跳转到域名

前言&#xff1a;先到微软的 https://www.iis.net/downloads/microsoft/url-rewrite 下载URL Rewrite 目标&#xff1a;输入ip跳转到域名所在的网站 比如58的115.159.231.173 跳转到https://passport.58.com/login 先看下58的例子 我们在地址栏输入ip之后 箭头指向的地方是跳转…

java基础五

继承 1. 继承含义 在面向对象编程中&#xff0c;可以通过扩展一个已有的类&#xff0c;并继承该类的属性和行为&#xff0c;来创建一个新的类&#xff0c;这种方式称为继承&#xff08;inheritance&#xff09;. 2. 继承的优点 A&#xff0e;代码的可重用性 B&#xff0e;子类可…

Mac OS X 下Java开发环境配置

首先自己又装的jdk1.8版本目录&#xff1a;/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home待添加。。。转载于:https://blog.51cto.com/jiyanle/1790537

mysql emoji表情_让MySQL支持Emoji表情 mysql 5.6

最近在做微信相关的项目&#xff0c;其中MySQL 要存储emoji表情&#xff0c;因此发现我们常用的utf8 字符集根本无法存储表情。网上有不少替代方案。本人还是采用了修改MySQL字符集的方案简单快捷。首先将我们数据库默认字符集由utf8 更改为utf8mb4&#xff0c;对应的表默认字符…

高效开发iOS系列 -- 那些不为人知的KVC

我的简书地址&#xff1a;http://www.jianshu.com/p/a6a0abac1c4a valueForKeyPath 本篇来解说一下那些不为人知&#xff0c;也常常被忽略掉&#xff0c;而且非常有用的KVC干货小技巧 获取数组里的,最大、最小、平均、求和 NSArray *array ["1","3",2,9.5…

::selection

改变浏览器文字选中背景 ::selection CSS的伪类选择器 只有一小部分CSS属性可以用于::selection选择器&#xff1a; color, background-color, cursor, outline, text-decoration, text-emphasis-color和text-shadow。 要特别注意的是&#xff0c;background-image会如同其他属…

B00013 字符串哈希函数

哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值&#xff0c;这个小的二进制值称为哈希值。 哈希函数用途广泛&#xff0c;这个程序给出了绝大多数常用的哈希函数。源程序来自&#xff1a;哈希算法_百度百科。 程序员可以根据自己的需要取用这些代码。 需要注意的…

*hdu5632Rikka with Array

$n \leq 10^300$&#xff0c;问所有$i<j$且$f_i>f_j$的$(i,j),1 \leq i \leq n,1 \leq j \leq n$数量。对某个数取模。 $f(a,b,0/1/2/3)$--前$a$位&#xff0c;两个数相差$b$个1&#xff0c;$b$可以为负数&#xff0c;然后四种情况&#xff1a;$i<j<n$&#xff0c;…

java正则表达式提取字符串中的数字

http://stackoverflow.com/questions/2367381/extract-numbers-from-a-string-java Pattern p Pattern.compile(\\d); 使用这个会有空字符串出现 Pattern p Pattern.compile("-?\\d"); 这是OK,转载于:https://www.cnblogs.com/pengxinglove/p/4476634.html

python3中的正则模块

本文引至: 正则模块 与正则最相关的应该算是字符串, 但是,在内置的py的str类型中, 并没有内置的正则方法. 我们可以看一下str的基本方法:我觉得最有用的,应该算find,len,split,join 这4个方法了. 但对于字符串操作来说, 这简直too too simple. 所以, py提供了我们一个Re 模块, …

wamserver怎么把mysql找回来_将php连接wampserver自带的MySQL数据库 所遇到各种问题解决办法...

将php连接到MySQL数据库的方法有很多&#xff0c;在这里我使用的是mysqli_connect方法&#xff0c;此博客所解答的问题汇总&#xff1a;1.wampserver服务器离线但图标为正常绿&#xff1b;2.wampserver 2/3服务正常运行&#xff0c;3个服务分别是哪些&#xff1f;3.wampserver …

Oracle11.2.0.4 windows32+64bit opatch工具 11.2.0.0 百度云盘下载

2016年6月3日最新11GR2版本11.2.0.0的opatch工具&#xff08;版本号&#xff1a;P6880880&#xff09;FOR Windows 3264bit环境 版本&#xff1a;Windows 32BIT 11G R2版本11.2.0.0 opatch工具 p6880880下载地址 地址&#xff1a;链接&#xff1a;http://pan.baidu.com/s/1cqP6…

Linux防火墙iptables基础详解

一、前言防火墙&#xff0c;其实说白了讲&#xff0c;就是用于实现Linux下访问控制的功能的&#xff0c;它分为硬件的或者软件的防火墙两种。无论是在哪个网络中&#xff0c;防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作&#xff0c;这就…