数据结构函数题-创新互联
目录
创新互联建站成立以来不断整合自身及行业资源、不断突破观念以使企业策略得到完善和成熟,建立了一套“以技术为基点,以客户需求中心、市场为导向”的快速反应体系。对公司的主营项目,如中高端企业网站企划 / 设计、行业 / 企业门户设计推广、行业门户平台运营、重庆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://lswzjz.com/article/ggsoi.html