先放个地址题目链接:https://pintia.cn/problem-sets/434/problems/type/6感谢免费开放题集
函数题
编程题题解链接:https://blog.youkuaiyun.com/Alpaca00/article/details/104418351
习题1.8 二分查找
就是一个二分查找的裸题应该没什么好说的,主要是要注意他的L是一个指针然后注意判断条件不要写反了,还有就是他的返回值不能自己随便写,要用他设置好的宏定义或者枚举。
Position BinarySearch( List L, ElementType X ){
Position left=1,right=L->Last;
Position mid;
while(left<=right){
mid=(left+right)/2;
if(L->Data[mid]==X) return mid;
if(L->Data[mid]>X){
//注意这里的判断是根据元素是升序或降序来写的
right=mid-1;
}else{
left=mid+1;
}
}
return NotFound;
}
习题1.9 有序数组的插入
这个因为是在有序数组插入,所以定位插入位置可以用二分查找。其他就没啥了
bool Insert( List L, ElementType X )
{
if(L->Last==MAXSIZE-1) return false;
Position left=0,right=L->Last;
Position mid,ans;
int flag;
while(left<=right){
mid=(left+right)/2;
if(L->Data[mid]==X) return false;
if(L->Data[mid]>X){
flag=1;
left=mid+1;
}else{
flag=0;
right=mid-1;
}
}
if(flag) mid+=1;
right=L->Last+=1;
while(right>mid){
L->Data[right]=L->Data[right-1];
right--;
}
L->Data[right]=X;
return true;
}
习题2.4 递增的整数序列链表的插入
因为是链表所以只能一个个比较找到插入位置,然后定义一前一后两个指针方便插入。
List Insert( List L, ElementType X )
{
PtrToNode p1=L->Next,p2=L;
while(