第16周【项目 4-为动态数组扩容】

问题描述:

  下面的程序,利用动态数组保存学生的成绩。当再有一批学生成绩需要保存时,要为之扩容(和吃
自助一样,用多少,取多少,这好),请补充完整下面的程序,实现如图所示的功能。

int main( ){
int num,i,addNum; //num 是小组人数
cout<<"输入学生人数: ";
cin>>num;
int *score = new int[num];
cout<<"请输入学生成绩: ";
//输入num 名同学的成绩
for(i=0; i<num; i++)
cin>>score[i]; //*(score+i)
cout<<"需要增加多少名学生? ";
cin>>addNum; //addNum 是需要增加的人数
//下面的程序完成对数组的扩容,并输入另外的成绩
……
cout<<"现在共有" << num << "名同学,他们的成绩是: "<<endl;
for(i=0; i<num; i++)
cout<<score[i]<<" ";
cout<<endl;
delete []score;
return 0;
}

提示 1:新增一个恰当长度的动态数组,将原数组中的数据“复制”到新数组,接着再输入新的数
据。增加新数据后的数组,成为保存数据的新数组。
提示 2:为保证系统的效率,要及时释放不再用的空间

代码:

#include <iostream>
#include <cstdio>
using namespace std;
int main( )
{
    int num,i,addNum; //num 是小组人数
    cout<<"输入学生人数: ";
    cin>>num;
    int *score = new int[num];
    cout<<"请输入学生成绩: ";
//输入num 名同学的成绩
    for(i=0; i<num; i++)
        cin>>score[i]; //*(score+i)
    cout<<"需要增加多少名学生? ";
    cin>>addNum; //addNum 是需要增加的人数
//下面的程序完成对数组的扩容,并输入另外的成绩
    int *addscore=new int [num+addNum];
    cout<<"输入学生成绩";
    i=0;
    while (i<num)
        addscore[i]=score[i++];
        while (i<addNum+num)
            cin>>addscore[i++];
            num+=addNum;
    cout<<"现在共有" << num << "名同学,他们的成绩是: "<<endl;
    for(i=0; i<num; i++)
        cout<<addscore[i]<<" ";
    cout<<endl;
      delete []addscore;
      delete []score;
    return 0;
}

运行结果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HashMap的扩容机制是指当HashMap中的元素个超过数组长度乘以负载因子,就会重新分配一个更大的数组,并将原来的元素重新计算哈希值并插入到新的数组中。不同版本的Java实现了不同的扩容机制。在JDK1.7版本中,HashMap的默认容器长度为16扩容因子为0.75,以2的n次方扩容,最高可扩容30次。第一次扩容是在长度达到16*0.75=12的候开始扩容扩容后的长度为16*2^1=32。 在JDK1.8中,HashMap的扩容机制有以下改进: - HashMap在第一次调用put方法才会初始化数组,而不是在创建对象就初始化。 - HashMap在初始化或扩容,会根据指定或默认的容量找到不小于该容量的2的幂次方,并将其赋值给阈值。 - 然后在第一次调用put方法,会将阈值赋值给数组长度,并让新的阈值等于数组长度乘以负载因子。 - 在扩容过程中,HashMap不需要重新计算节点的哈希值,而是根据哈希值最高位判断节点在新数组中的位置,要么在原位置,要么在原长度加上原位置处。 - 在扩容过程中,HashMap会正序遍历原来的数组,并保持链表中节点的相对顺序不变。 - 如果某个链表中的节点超过8个,并且数组长度大于等于64,则会将链表转化为红黑树,提高查找效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [hashmap 扩容机制](https://blog.csdn.net/a772304419/article/details/130835555)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [HashMap的扩容机制](https://blog.csdn.net/eg1107/article/details/128228687)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值