数据结构

1.hash表,便于插入和查找

hash函数的构造方法:直接定址法、数字分析法、平方取中法、折叠法、除留余数法

处理冲突的方法:开放地址法、再哈希法、链地址法

2.栈通常采用的两种存储结构是(线性存储结构和链表存储结构)

3.用链表表示线性表的优点是(便于插入和删除操作) 

4.循环链表的主要优点是(从表中任一结点出发都能访问到整个链表) 

5.线性表的顺序存储结构和线性表的链式存储结构分别是(随机存取的存储结构、顺序存取的存储结构) 

6下列数据结构具有记忆功能的是(栈);递归算法一般需要利用(队列)实现。

7.在一个容量为25的循环队列中,若头指针front=16,尾指针rear=9,则该循环队列中共有 18 个元素。注:当rear<front时,元素个数=总容量-(front-rear); 当rear>front时,元素个数=rear-front。

8.判断两个数组中是否存在相同的数字 给定两个排好序的数组,怎样高效得判断这两个数组中存在相同的数字?

O(n)算法。因为两个数组都是排好序的。所以只要一次遍历就行了。首先设两个下标,分别初始化为两个数组的起始地址,依次向前推进。推进的规则是比较两个数组中的数字,小的那个数组的下标向前推进一步,直到任何一个数组的下标到达数组末尾时,如果这时还没碰到相同的数字,说明数组中没有相同的数字。

  bool findcommon2(int a[], int size1, int b[], int size2) { 
      int i=0,j=0;     
 while(i<size1 && j<size2){
if(a[i]==b[j])
 return true;
if(a[i]>b[j]) 
j++; 
if(a[i]<b[j])
i++; 
    } 
 return false;
}

9.最大子序列 问题:  给定一整数序列A1, A2,... An (可能有负数),求A1~An的一个子序列Ai~Aj,使得Ai到Aj的和最大?

给出一个算法复杂度为O(n)的线性算法实现,这里运用动态规划的思想。

int max_sub2(int a[], int size) {     
int i,max=0,temp_sum=0;   
for(i=0;i<size;i++){
temp_sum+=a[i];     
if(temp_sum>max)  
max=temp_sum;
else if(temp_sum<0)
temp_sum=0; //之前的数据都可以放弃
}
return max;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值