数据结构函数题-创新互联

目录

创新互联建站成立以来不断整合自身及行业资源、不断突破观念以使企业策略得到完善和成熟,建立了一套“以技术为基点,以客户需求中心、市场为导向”的快速反应体系。对公司的主营项目,如中高端企业网站企划 / 设计、行业 / 企业门户设计推广、行业门户平台运营、重庆App定制开发成都手机网站制作、微信网站制作、软件开发、雅安服务器托管等实行标准化操作,让客户可以直观的预知到从创新互联建站可以获得的服务效果。

求二叉树高度

二叉树的遍历

先序输出叶结点

统计二叉树结点个数

统计二叉树叶子结点个数

直接插入排序

冒泡排序

简单选择排序

折半插入排序

折半查找

有序数组的插入


求二叉树高度

本题要求给定二叉树的高度。

函数接口定义:

int GetHeight( BinTree BT );

其中BinTree结构定义如下:

typedef struct TNode *Position; typedef Position BinTree; struct TNode{ ElementType Data; BinTree Left; BinTree Right; };

要求函数返回给定二叉树BT的高度值。

int GetHeight( BinTree BT ){
  if(BT == NULL){
    return 0;
  }
  int left = 1 + GetHeight(BT->Left);
  int right = 1 + GetHeight(BT->Right);
  return 1 +  left>right?left:right;
}
二叉树的遍历

本题要求给定二叉树的4种遍历。

#define MAXSIZE 50
void InorderTraversal( BinTree BT )//中序遍历 左根右 
{
 if(BT)
 {
  InorderTraversal(BT->Left);
  printf(" %c",BT->Data);
  InorderTraversal(BT->Right); 
 }
 } 
 void PreorderTraversal( BinTree BT )//先序遍历(根左右)
 {
  if(BT){
	   printf(" %c",BT->Data);
	   PreorderTraversal(BT->Left);
	   PreorderTraversal(BT->Right);
	}
  } 
void PostorderTraversal( BinTree BT )//后序  左右根 
{
 if(BT)
 {
	  PostorderTraversal(BT->Left);
	  PostorderTraversal(BT->Right);
	  printf(" %c",BT->Data);
   }
}  
void LevelorderTraversal( BinTree BT )//第一种方法,若实现需要加上一些函数
{
 Queue Q;
 BinTree T;
 
 if(!BT) return ;
 
 Q = CreatQueue();
 AddQ(Q, BT);
 
 while(!IsEmpty(Q))
       {
	  T = DeleteQ(Q);
	  printf(" %c",T->Data);
	  if(T->Left)  AddQ(Q,T->Left);
	  if(T->Right) AddQ(Q,T->Right);
	}
}
先序输出叶结点

本题要求按照先序遍历的顺序输出给定二叉树的叶结点。

void PreorderPrintLeaves( BinTree BT )
{
    if(BT==NULL)return;
    if(BT->Left==NULL && BT->Right==NULL)printf(" %c",BT->Data);//叶子结点就是左右都为空的结点
    PreorderPrintLeaves(BT->Left);
    PreorderPrintLeaves(BT->Right);
}
统计二叉树结点个数

本题要求实现一个函数,可统计二叉树的结点个数。

int NodeCount ( BiTree T){
	int cnt = 0;
	if(T!=NULL){
		cnt++;//如果不为空则先自加1 
		cnt += NodeCount(T->lchild);//加上左子树的结点个数 
		cnt += NodeCount(T->rchild);//加上右子树的结点个数 
	}
	return cnt;//返回总的结点个数 
}
统计二叉树叶子结点个数

本题要求实现一个函数,可统计二叉树的叶子结点个数。

int LeafCount ( BiTree T)
{
    int count=0;
    
    if(T==NULL){//空树
        return 0;
    }else if(T->lchild==NULL && T->rchild==NULL){//只有一个根节点
        return count+1;
    }else {
        count=LeafCount(T->lchild)+LeafCount(T->rchild);//关系为左右相加求和
        return count;
    }
}
直接插入排序

本题要求实现直接插入排序函数,待排序列的长度1<=n<=1000。

void  InsertSort(SqList L){
    int i,j;
    int temp;
    for(i=1;i<=L.Length;i++){
        for(j=i+1;j<=L.Length;j++){
            if(L.elem[i]>L.elem[j]){
                temp = L.elem[j];
                L.elem[j] = L.elem[i];
                L.elem[i] = temp;
            }
        }
    }
}

冒泡排序

本题要求实现冒泡排序函数,待排序列的长度1<=n<=1000。

void bubble_sort(SqList L){//创作不易,点个赞吧,新春快乐~
	int len = L.Length;
	for(int i=1; iL.elem[j+1]){
				int temp = L.elem[j];
				L.elem[j] = L.elem[j+1];
				L.elem[j+1] = temp;
			}
		}
	}
}

简单选择排序

本题要求实现简单选择排序函数,待排序列的长度1<=n<=1000。

void  SelectSort(SqList L){
    int i, j, k, temp;
    for(i=1; i


折半插入排序

实现折半插入排序。

void BInsertSort(SqList &L){//创作不易,点个赞吧,新春快乐~
	int low, high;
	for(int i=2; i<=L.length; i++){
		L.r[0] = L.r[i];
		low = 1;
		high = i-1;
		while(low<= high){
			int mid = (low+high)/2;
			if(L.r[0].key< L.r[mid].key)
				high = mid - 1;
			else
				low = mid + 1;
		}
		for(int j=i-1; j>=high+1; --j)
			L.r[j+1] = L.r[j];
		L.r[high+1] = L.r[0];
	}
}

折半查找

给一个严格递增数列,函数int Search_Bin(SSTable T, KeyType k)用来二分地查找k在数列中的位置。

int  Search_Bin(SSTable T, KeyType k)
{
	int Low, Mid, High;        //    设立low,Mid,H igh标志
	Low = 1; High = T.length;    
	while (Lowk)
				High = Mid - 1;
			else
				return Mid;
	}
	return 0;
}
有序数组的插入

本题要求将任一给定元素插入从大到小排好序的数组中合适的位置,以保持结果依然有序。

Position BinarySearch( List L, ElementType X )
{
 int low = 1, high = L->Last+1,mid;
 while (low<= high)
 {
       mid = (low + high) / 2;
        if (L->Data[mid]Data[mid]>X)
            low = mid + 1;
        else
            return 1;
 }
 return 0;

}
bool Insert(List L, ElementType X)
{
 int pos,i,j;
 if (L->Last + 1 >= MAXSIZE||1==BinarySearch(L, X)) return false;
    
 for ( i = 0; i<= L->Last; ++i)
  if (L->Data[i]<= X) break;
  pos=i;
 for (int j = L->Last;j>=pos; j--){
     L->Data[j+1] = L->Data[j];
 }  
  L->Data[pos] = X;
  L->Last++;
 return true;
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前题目:数据结构函数题-创新互联
链接地址:http://ybzwz.com/article/ggsoi.html