欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

2021年

最编程 2024-10-16 12:03:08
...

1.C语言程序设计部分

1.银行账户信息包括:用户ID,姓名,密码,余额,写出账户信息结构体,并将数据存储在元素个数不超过90的结构体数组中,设计程序计算余额的平均值,并将余额大于平均值的账户信息输出打印。

2.输入一个数m,请编写程序计算sum=1-1/22-1/32-…-1/m2

都是比较经典的算法设计

2.数据结构程序设计部分

1.设计算法在有序单链表中删除重复元素e,使得单链表删除e后依然有序。

typedef int Elemtype;
typedef struct ListNode
{
    Elemtype data;
    struct ListNode *next;
}ListNode;

//该问题中,传入的单链表不含头结点
void delete_repeatnode(ListNode *&L)
{
    ListNode *pre=L;  //pre指向第一个结点
    ListNode *cur=L->next;  //指向第一个结点的后一个的指针,假如后一个和前一个相等,就把这后一个删除
    
    while(cur!=NULL)
    {
        if(cur->data==pre->data) //删除后一个
        {
            pre->next=cur->next;  //只有删除的时候pre指针才发生变化,否则不动
        }else
        {
            pre=pre->next;
        }
        
        cur=cur->next;
    }
}

2.设计算法在二叉排序树中查找第k大的结点

二叉排序树遍历模版-中序遍历得到有序序列,注意保存它的结点地址

补一个代码刨析:

这道题很明显是二叉排序树的中序遍历问题,找到第k个结点
由于返回值是指针类型,在写遍历模版的时候,要把返回值存下来
处理返回值的关键在于根节点的处理,根节点(子树根节点)是怎么返回的,这是关键。
通过思考来补全整个结果,找到这个结点后,不往下遍历了,else右子树,假如答案是在某个右子树中,return也把答案传回去,而且该循环结束
假如答案是在某个左子树中,return之后,接下来的操作都是没有意义的,甚至还会继续执行遍历右子树,最后会返回一个空,所以必须扼杀于此,所以判断是否找到了,如果找到了,就直接返回,不执行后面的操作。

BiTNode * funtion_k(BiTree T,int *k) //输入的输出的树的根节点,和第k大,返回值是第k大的结点指针
{
    if(T==NULL)return NULL;
    
    BiTNode *left_result=funtion_k(T->lchild, k);
    if(left_result!=NULL)return left_result;//或者if(*k==0)return left_result;
  
  
    
    (*k)--;
    if(*k==0)
    {
        return T;
    }else
    {
        return funtion_k(T->rchild, k);
    }
    
}