6-1 顺序表的创建和查询 分数 15 全屏浏览 切换布局 作者 YJ 单位 西南石油大学 编写函数实现顺序表的初始化和顺序查找。 函数接口定义:  1 Status InitList_Sq(SqList &L) 2 int Locate(SqList L,ElemType key) 其中 L 为顺序表。 key 为待查找的关键字。 裁判测试程序样例:  1 #include<stdio.h> 2 #include<malloc.h> 3 #include<string.h> 4 #define OK 1 5 #define ERROR 0 6 #define OVERFLOW -2 7 #define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量 8 #define LISTINCREMENT 10 //线性表存储空间的分配增量 9 typedef int Status; 10 typedef int ElemType; 11 typedef struct //定义顺序表存储结构,与书上一致 12 { 13 ElemType *elem; //存储空间基址,体现动态性 14 int length; //当前表的长度 15 int listsize; //当前分配的存储容量 16 }SqList; 17 Status InitList_Sq(SqList &L) //对顺序表进行初始化,这是在使用顺序表之前必须做的工作,否则顺序表没有存储空间无法进行操作 18 { 19 /* 请在这里填写答案 */ 20 }//InitList_Sq 21 22 Status Listinput(SqList &L) //预先输入4个值 23 { 24 int i; 25 for(i=0;i<4 ;i++) 26 L.elem[i]=i*10 +i; 27 L.length=4 ; 28 return OK; 29 } 30 31 Status print_List(SqList L) //打印顺序表元素 32 { 33 for(int i=0;i<L.length;i++) //用循环从前往后依次打印顺序表中元素的值, 34 printf("%4d" ,L.elem[i]); 35 printf("\n" ); 36 return OK; 37 } 38 int Locate(SqList L,ElemType key) //按值查找,L为顺序表,key为待查找的关键字 39 { 40 /* 请在这里填写答案 */ 41 } 42 43 int main() 44 { 45 SqList L; 46 int loc; 47 ElemType nam; 48 InitList_Sq(L); //初始化 49 Listinput(L); //预先输入几个值 50 loc=Locate(L,2 ); 51 if(loc==-1 ) 52 printf("未找到\n" ); 53 else 54 printf("%d\n" ,loc); 55 loc=Locate(L,22 ); 56 if(loc==-1 ) 57 printf("未找到\n" ); 58 else 59 printf("%d\n" ,loc); 60 return 0 ; 61 } 输入样例: 1 11 22 33 0 输出样例: 在这里给出相应的输出。例如: 未找到 2 代码长度限制
时间: 2025-06-25 15:07:10 浏览: 9
### 实现顺序表的初始化函数 `InitList_Sq` 和顺序查找函数 `Locate`
以下是基于 C 语言实现顺序表的初始化函数和顺序查找函数的具体方法:
#### 初始化函数 `InitList_Sq`
该函数用于创建并初始化一个顺序表对象。它会分配内存空间,并设置初始状态,例如长度为零以及指向数据区域的有效指针。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int *data; // 存储数据元素的数组
int length; // 当前顺序表的实际长度
} SqList;
// 初始化顺序表
SqList InitList_Sq() {
SqList list;
list.data = (int *)malloc(MAXSIZE * sizeof(int)); // 动态分配数组空间
if (!list.data) { // 如果分配失败,则退出程序
printf("Memory allocation failed!\n");
exit(1);
}
list.length = 0; // 初始状态下,顺序表为空
return list;
}
```
此部分实现了动态分配数组的功能[^1],并通过设定 `length=0` 来表示当前顺序表处于空的状态。
---
#### 查找函数 `LocateElem`
该函数按照给定值进行顺序查找,返回第一个匹配项的位置索引(从 1 开始计数)。如果未找到目标值,则返回 0 表示不存在。
```c
// 按值查找:定位某个特定值首次出现的位置
int LocateElem(SqList L, int e) {
for (int i = 0; i < L.length; ++i) { // 遍历整个列表
if (L.data[i] == e) { // 找到相等的数据
return i + 1; // 返回其逻辑序号(注意是从1开始)
}
}
return 0; // 若无匹配则返回0
}
```
这里采用了简单的遍历方式逐一比较每个节点的内容是否等于输入参数 `e` 的值[^2]。一旦发现符合条件的情况立即停止循环并返回对应下标的转换结果;如果没有找到任何相符的结果,则最终返回默认值 0。
---
#### 测试代码框架
为了验证以上两个核心功能模块的工作情况,可以构建如下所示的一个简单测试环境:
```c
void PrintList(SqList L){
for(int i=0;i<L.length;i++)printf("%d ",L.data[i]);
putchar('\n');
}
int main(){
SqList myList = InitList_Sq(); // 调用初始化函数
// 假设向其中加入一些随机整数值作为演示用途...
int sampleData[] = {89,-76,345,23};
for(int j=0;j<sizeof(sampleData)/sizeof(*sampleData);j++)
myList.data[j]=sampleData[j];
myList.length=(sizeof(sampleData)/sizeof(*sampleData));
PrintList(myList);
int searchValue=-76;
int resultPosition = LocateElem(myList,searchValue);
if(resultPosition>0)
printf("Element %d found at position:%d\n",searchValue,resultPosition);
else
printf("Element not present.\n");
free(myList.data); // 记得释放之前申请过的堆内存资源
return 0;
}
```
上述例子展示了如何调用这两个主要的操作接口完成实际应用需求的同时也包含了必要的清理工作以防泄露潜在使用的额外存储单元[^2]。
---
###
阅读全文