数据结构顺序表笔试题

数据结构

#include<stdio.h>
//顺序表从k开始的后继元素向后移动一个单位
void DataMov(int num[],int count,int k)
{
    for (int i=count-1; i>=k; i--)
    {
        num[i+1]=num[i];
    }
}
//遍历数据表
void DataPrint(int num[],int count)
{
    for (int i = 0; i < count; i++)
    {
        printf("%d ",num[i]);
    }
    printf("\n");
}

int main(int argc, char const *argv[])
{
    int num[15]={2,4,7,11};//顺序表
    int x=5;
    int count;//count 表示顺序表中数的个数
    //利用顺序表中数值增大的特点,得出count值
    for (count = 1; num[count]>num[count-1]; count++);
    printf("count=%d\n",count);
    //遍历顺序表
    DataPrint(num,count);
    //利用二分查找法确定x的位置
    if (x < num[0]) //当x 小于最小值时,顺序表从0开始向后移动
    {
        DataMov(num,count,0);
        num[0]=x;
    }
    else if  (x > num[count-1]) //当x比最大值大,则直接在末尾插入
    {
        num[count]=x;
    }
    else    //当x在最大值和最小值中间时,二分查找
    {
        int left=0,right=count-1;//lest记录二分查找范围的左值下标,right记录二分查找范围的右值下标
        int mid=(left+right)/2;//mid记录二分查找的中值的下表
        //循环缩小二分查找范围,当范围缩小到两个相邻数值之间时,循环结束
        while (right-left!=1)      
        {   
                mid=(left+right)/2;
                if (x>num[mid]) left=mid;//x与中值比较,当x大时,左值范围缩小
                else  right=mid;//否则右值范围缩小
        }
        DataMov(num,count,right);//找到x的位置,在left和right中间,从right下标开始的元素往后移
        num[right]=x;//把x的值插入right下标位置
    }
    count++;//顺序表个数+1
      //遍历顺序表
    DataPrint(num,count);
    return 0;
}

posted @ 2024-04-22 00:07  沉舟道人  阅读(31)  评论(0编辑  收藏  举报