安徽某高校《数据结构》作业9

题目:

设计一个测试应用程序完成如下功能:

⑴建立顺序表L1;依次插入数据元素13,5,75,37,21,56,64,92,80,88,19;直至数据元素为32767为止

(2)顺序查找元素75;(输出:顺序查找75成功,第3个数)

(3)顺序查找元素50;(输出:顺序查找50失败)

(4)建立顺序表L2;依次插入数据元素5,13,19,21,37,56,64,75,80,88,92;直至数据元素为32767为止

(5)折半查找元素75;(输出:折半查找75成功,第8个数)

(6)折半查找元素50;(输出:折半查找50失败)

要求:

1. 顺序表的类型定义

//线性表存储空间的初始分配量

   #define  max  100    //线性表存储空间的分配增量

   typedef  struct{

           int   elem[max];     //存储区域基地址

           int  length;     //当前有效长度

   } sqlist;

2. 顺序表的基本操作

1)建立顺序表sqlistinit()

2)顺序查找search1(sqlist L,int k)

3)折半查找search2(sqlist L,int k)

示例代码:

#include <stdio.h>

#define max 100

typedef struct {
    int elem[max];
    int length;
} sqlist;

// 初始化顺序表
sqlist initsq() {
    sqlist L;
    int e, i = 0;
    L.length = 0;

    printf("请输入顺序表元素,以32767结束:\n");
    while (1) {
        scanf("%d", &e);
        if (e == 32767) break;
        if (L.length < max) {
            L.elem[i++] = e;
            L.length++;
        } else {
            printf("顺序表已满,无法插入元素 %d\n", e);
            break; // 如果顺序表已满,结束输入
        }
    }
    return L;
}

// 顺序查找元素
int search1(sqlist L, int k) {
    for (int i = 0; i < L.length; ++i) {
        if (L.elem[i] == k) {
            return i + 1; // 返回元素位置(从1开始)
        }
    }
    return 0; // 未找到返回0
}

// 折半查找元素
int search2(sqlist L, int k) {
    int low = 0, high = L.length - 1, mid;
    while (low <= high) {
        mid = (low + high) / 2;
        if (L.elem[mid] == k) {
            return mid + 1; // 返回元素位置(从1开始)
        } else if (L.elem[mid] < k) {
            low = mid + 1;
        } else {
            high = mid - 1;
        }
    }
    return 0; // 未找到返回0
}

int main() {
    // 建立顺序表L1
    sqlist L1 = initsq();

    // 顺序查找元素75
    int result1 = search1(L1, 75);
    if (result1) {
        printf("顺序查找75成功,第%d个数\n", result1);
    } else {
        printf("顺序查找75失败\n");
    }

    // 顺序查找元素50
    int result2 = search1(L1, 50);
    if (result2) {
        printf("顺序查找50成功,第%d个数\n", result2);
    } else {
        printf("顺序查找50失败\n");
    }

    // 建立顺序表L2
    sqlist L2 = initsq();

    // 折半查找元素75
    int result3 = search2(L2, 75);
    if (result3) {
        printf("折半查找75成功,第%d个数\n", result3);
    } else {
        printf("折半查找75失败\n");
    }

    // 折半查找元素50
    int result4 = search2(L2, 50);
    if (result4) {
        printf("折半查找50成功,第%d个数\n", result4);
    } else {
        printf("折半查找50失败\n");
    }

    return 0;
}

运行结果:

(个人答案,如有谬误都是我的锅,还望先生救我...)

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值