1、OSI七层模型
2物理层
4网络层
5传输层
6会话层
7表示层
8应用层
2、进程间数据共享的方式三种
文件映射
共享内存
信号
匿名管道
命名管道
邮件槽
剪贴板
3、TCP/UDP区别
4、打印数组的所有组合
#include <stdio.h>
int n = 0;
void swap(int *a, int *b)
{
int m;
m = *a;
*a = *b;
*b = m;
}
void perm(int list[], int k, int m)
{
int i;
if(k > m)
{
for(i = 0; i <= m; i++)
printf("%d ", list[i]);
printf(" ");
n++;
}
else
{
for(i = k; i <= m; i++)
{
swap(&list[k], &list[i]);
perm(list, k + 1, m);
swap(&list[k], &list[i]);
}
}
}
int main()
{
int list[] = {1, 2, 3, 4, 5};
perm(list, 0, 4);
printf("total:%d ", n);
return 0;
}
二进制
首先,把数组每一个元素用一个二进位表示,例如:
A B C D E
1 1 1 1 1 ---> 于是它最多有11111(二进制)种不重复组合(即31种)(不考虑顺序--按楼主要求)
于是,只要检查从1到31这些数字的二进位哪些是二进制值1,就可以得出组合了。(位值为1的元素选取,位值为0的元素弃之)
(转自网络)
5、二叉树的面积
深度优先搜索,广度优先搜索的实现
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define TRUE 1
#define FLASE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;
Status CreateBiTree(BiTree &T)
{
TElemType e;
scanf("%d",&e);
if(e==0) T=NULL;
else
{
T=(BiTree)malloc(sizeof(BiTNode));
if(!T)
exit(OVERFLOW);
T->data =e;
CreateBiTree(T->lchild );
CreateBiTree(T->rchild );
}
return OK;
}
int max(int a[])
{
int max,i;
max=a[0];
for(i=1;i<20;i++)
{
if(max<a[i])
max=a[i];
}
return max;
}
int BiTreeWidth (BiTree T)
{
if(T==NULL)
return 0;
else
{
static int a[20]={0};
static int i=0;
a[i]++;
i++;
BiTreeWidth (T->lchild );
if(T->lchild ==NULL)
i--;
BiTreeWidth (T->rchild );
if(T->rchild ==NULL)
i--;
return max(a);
}
}
另附:
二叉树高度、宽度、结点个数、叶子结点个数
转自网络未经测试
实现二叉树宽度递归算法~
#include <iostream>
using namespace std;
typedef struct node
{
char data;
int lab;
struct node *lchild;
struct node *rchild;
}btree;
int m=0;
void ct(btree *&b,char *str)
{
btree *st[99],*p=NULL;
int top=-1,k,j=0;
char ch;
b=NULL;
ch=str[j];
while(ch!='\0')
{
switch(ch)
{
case '(':top++;st[top]=p;k=1;break;
case ')':top--;break;
case ',':k=2;break;
default:p=(btree *)malloc(sizeof(btree));
p->data=ch;
p->lchild=p->rchild=NULL;
if(b==NULL)
b=p;
else
{
switch(k)
{
case 1:st[top]->lchild=p;break;
case 2:st[top]->rchild=p;break;
}
}
}
j++;
ch=str[j];
}
}
void outbt(btree *b)
{
if(b!=NULL)
{
cout<<b->data;
outbt(b->lchild);
outbt(b->rchild);
}
}
btree *findchild(btree *b,char x)
{
btree *p;
if(b==NULL)
{
return NULL;
}
else
if(b->data==x)
{
cout<<"找到结点"<<x<<"!"<<endl;
if(b->lchild==NULL)
cout<<"左节点为空!"<<endl;
else
cout<<"左孩子为:"<<b->lchild->data<<endl;
if(b->rchild==NULL)
cout<<"右孩子为空!"<<endl;
else
cout<<"右孩子为:"<<b->rchild->data<<endl;
return b;
}
else
{
p=findchild(b->lchild,x);
if(p!=NULL)
return p;
else
return findchild(b->rchild,x);
}
}
int btreeheight(btree *b)
{
int lchildh,rchildh;
if(b==NULL)
return(0);
else
{
lchildh=btreeheight(b->lchild);
rchildh=btreeheight(b->rchild);
return(lchildh>rchildh?(lchildh+1):(rchildh+1));
}
}
int i=-1,a[20];
void btreewide(btree *b)
{
if(b!=NULL)
{
if(b->lchild!=NULL)
{
i++;
b->lchild->lab=b->lab+1;
a[i]=b->lab+1;
}
if(b->rchild!=NULL)
{
i++;
b->rchild->lab=b->lab+1;
a[i]=b->lab+1;
}
btreewide(b->lchild);
btreewide(b->rchild);
}
}
void vernum(btree *b)
{
if(b!=NULL)
{
m++;
vernum(b->lchild);
vernum(b->rchild);
}
}
int leafver(btree *b)
{
if(b==NULL)
return 0;
else
if(b->lchild==NULL&&b->rchild==NULL)
return 1;
else
return leafver(b->lchild)+leafver(b->rchild);
}
void main()
{
char *s;
s="A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))";
btree *bt;
cout<<"将要创建的二叉树:"<<endl<<s<<endl;
ct(bt,s);
cout<<"输出二叉树:"<<endl;
outbt(bt);
cout<<endl;
cout<<"H结点左右孩子结点值:"<<endl;
findchild(bt,'H');
cout<<"二叉树的深度:"<<btreeheight(bt)<<endl;
vernum(bt);
cout<<"二叉树结点个数:"<<m<<endl;
cout<<"二叉树叶子结点个数:"<<leafver(bt)<<endl;
bt->lab=1;
btreewide(bt);
int j,k,num,max=0;
for(j=1;j<=i+1;j++)
{
num=0;
for(k=0;k<=i;k++)
if(a[k]==j)
num++;
if(max<num)
{
max=num;
}
}
cout<<"二叉树宽度为:"<<max<<endl;
}
6、地图的点的文字位置的确定
1、扫描点附近的矩形邻域内是否为空
2改进:搜索算法