您的位置:首页 > 房产 > 建筑 > 2022年网络规划设计师_下载android版本下载安装_百度的seo关键词优化怎么弄_个人怎么在百度上做推广

2022年网络规划设计师_下载android版本下载安装_百度的seo关键词优化怎么弄_个人怎么在百度上做推广

2024/12/23 6:11:41 来源:https://blog.csdn.net/2301_80320259/article/details/144565178  浏览:    关键词:2022年网络规划设计师_下载android版本下载安装_百度的seo关键词优化怎么弄_个人怎么在百度上做推广
2022年网络规划设计师_下载android版本下载安装_百度的seo关键词优化怎么弄_个人怎么在百度上做推广

一、树

1.二叉链-定义

typedef struct BiTNode{
ElemType data;//数据域
struct BiTNode *lchild ,*rchild;//左、右孩子指针
}BiTNode , *BiTree ;

2.查找值为x的结点

BTNode   FindNode(BTNode   b,ElemType x) 
{  BTNode *p;if (b==NULL) return NULL;else if (b->data==x) return b;else{   p=FindNode(b->lchild,x);if (p!=NULL) return p;else return FindNode(b->rchild,x);}
}

3.求高度

int BTHeight(BiTree root) 
{  int m,n;if (root==NULL) return 0; 	//空树的高度为0else  {  m=BTHeight(root->lchild);	//求左子树的高度为lchilddepn=BTHeight(root->rchild);	//求右子树的高度为rchilddepreturn(m>n)? (m+1):(n+1));}
}

4.统计二叉树的结点

void PreOrder(BiTree root)
{  int count=0;if(root)
{  count++;PreOrder(root->LChild);PreOrder(root->RChild);}
}

5.输出叶子结点

void inOrder(BiTree root)
{if(root)
{     inOrder(root->LChild);if(root->LChild==NULL&& root->RChild==NULL)printf(root->data);inOrder(root->RChild);}
}

6.统计叶子结点个数

int leaf(BiTree root)
{int nl,nr;
if(root==NULL)   return 0; if(root->LChild==NULL&& root->RChild==NULL)return 1;nl=leaf(root->RChild);nr=leaf(root->LChild);return(nl+nr);
}

二、查找

1.定义

typedef struct{//查找表的数据结构(顺序表)
ElemType *elem;//动态数组基址
int TableLen;//表的长度
}SSTable;

2.顺序查找

int Search_Seq( SSTable ST,ElemType key){int i; ST.elem[0] =key; //哨兵	for( i=ST.TableLen ;ST.elem[i] !=key; --i) ;//从后往前找	return  i;//查找成功,则返回元素下标;查找失败,则返回0
}

3.折半查找

int Binary_Search( SSTable L,ElemType key){int low=1, high=L.TableLen,mid;while( low<=high){mid=( low+high)/2;//取中间位置if(L.elem[mid]==key)return mid;/查找成功则返回所在位置else if(L.elem [mid]>key)high=mid-1;//从前半部分继续查找
elselow=mid+1;//从后半部分继续查找
}
return -1;  //查找失败,返回-1
}

4.二叉排序树

typedef struct BSTNode{int key;//数据域struct BSTNode*lchild ,*rchild;//左、右孩子指针
}BSTNode,*BSTree;

5.查找

BSTNode *BST_Search(BSTree T,int key){
while(T!=NULL&&key!=T->key){//若树空或等于根结点值,则结束循环if(key<T->key)T=T->lchild; //小于,则在左子树上查找else T=T->rchild;//大于,则在右子树上查找
}return T;
}

6.二叉排序树插入

int BST_Insert(BSTree &T, int k){
if(T==NULL){//原树为空,新插入的结点为根结点T=(BSTree )malloc(sizeof(BSTNode) ) ;T->key=k;T->lchild=T->rchild=NULL;return 1;//返回1,插入成功  }
else if(k==T->key)//树中存在相同关键字的结点,插入失败return 0;
else if( k<T->key)//插入到T的左子树return BST_Insert(T->lchild,k);else //插入到T的右子树return BST_Insert(T->rchild,k);}

三、排序

1.待排序的数据类型定义

#define MAXSIZE  1000    //待排序的记录数目
typedef  int  KeyType;       //关键字类型
typedef  struct 
{KeyType   key;                 //关键字项    OtherType  other_data;  //其他数据项
} RecordType;                            //纪录类型
typedef  struct 
{RecordType    r[MAXSIZE+1];   int               length;            //序列长度
} RecordList;                         //记录序列类型(顺序表类型)

2.直接插入排序

void InsertionSort ( SqList &L ) 
{for ( i=2; i<=L.length; ++i ) if (L.r[i].key < L.r[i-1].key) {L.r[0] = L.r[i];            for ( j=i-1; L.r[0].key < L.r[j].key;  -- j )L.r[j+1] = L.r[j];        L.r[j+1] = L.r[0];               }
}

3.折半插入排序

void BiInsertionSort ( SqList &L ) 
{int i,j,low,high,mid;
for ( i=2; i<=L.length; ++i ) 
{
L.r[0] = L.r[i];      
low = 1;   high = i-1;
while (low<=high) 
{ m= (low+high)/2;           if (L.r[0].key < L.r[m].key)high = m-1;   else  low = m+1; }
for ( j=i-1;  j>=low;  --j )L.r[j+1] = L.r[j];      
}
L.r[low] = L.r[0];  
}

4.冒泡法排序

void BubbleSort(RecordList L)
{ int i,j;RecordType x;int  flag=1;for(i=1; i<=L.length-1&&flag; i++){	flag=0;for(j=1;j<= L.length-1; j++){  if(L.r[j].key>L.r[j+1].key){	x=L.r[j];L.r[j]=r[j+1];L.r[j+1]=x; flag=1;}}}
} 

5.快速排序

int QKpass (RecordType r[ ], int low, int high) 
{
r[0] = r[low];  
while (low<high) 
{while(low<high&& r[high].key>= r[0].key)-- high;      r[low] = r[high];
while (low<high && r[low].key<= r[0].key) ++ low;      
r[high] = r[low];
}
r[low] = r[0];     return low;
}
void QKSort(RecordType r[ ],int low,int high)
{   r[0]=r[low];if(low<high){pos=QKpass(r,low,high);QKSort(r,low,pos-1);QkSort(r,pos+1,high);	
}

6.简单选择排序

void SelectSort(RecordList L)
{  int i,j;RecordType t;for(i=1;i<= L.length -1;i++){	k=i;		  for(j=i+1;j<= L.length -1; j++)	  if(L.r[j].key<L.r[k].key)  k=j;      if(k!=i)	       {  t=L.r[i]; L.r[i]=L.r[k]; L.r[k]=t;}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com