MENU

顺序表定位

• October 25, 2020 •

顺序表定位操作listFind(SeqList *head,dataType x)的功能是:在线性表中查找是否存在数据元素x,如果存在,则返回线性表中和x值相等的第一个数据元素的符号(序号从0开始);如果不存在,则返回-1


题目分析:

在学习C语言的时候,相信大家应该都做过这样一个题:判断数组a[]中是否存在元素x,若存在,则返回下标,否则返回-1。是否有印象呢???

这两个题本质一模一样,唯一不同的是本题利用“顺序表”将数组a[]包装了起来。在遍历的过程中,拿顺序表的数据去和x比对,若相同,返回当前下标值,若到了最后一个数据元素都不相同,就返回-1


考点:

**1.遍历顺序表
2.挨个比对数据元素**


代码实现:

[prism lang="c"]
#include<stdio.h>
const int MAX = 20;     //设定这个顺序表的最大空间为20,也就是最多可以存20个int数
typedef int dataType;   //数据类型为int型
//声明顺序表结构体
typedef struct seqlist
{
    dataType a[MAX];             //声明这条顺序表存储数据的工具————数组(一段连续的地址空间,所以我们称这种方式为顺序存储)
    int size;                    //数据元素个数
}SeqList;
//初始化顺序表
void listInitiate(SeqList *seqlist)
{
    seqlist->size = 0;           //刚创建顺序表之后的数据个数为0
}
//往顺序表中放10个数
void listOriginal(SeqList *seqlist)
{
    for (int i = 0; i < 10; i++)
    {
        seqlist->a[i] = i*3;
        seqlist->size++;         //多了一个数据元素,所以size得+1;
    }
}
//在顺序表中查找数据,返回一个整型数
int  listFind(SeqList* seqlist, dataType data)
{
    for (int i = 0; i < seqlist->size; i++)  //从0到size,遍历顺序表中的所有元素
    {
        if (seqlist->a[i] == data)           //如果有相同数据,返回下标
            return i;
    }
    return -1;                               //比对结束都没有找到相同数据,返回-1
}
//专门用来遍历输出的函数
void listPrint(SeqList *seqlist)
{
    printf("顺序表:");
    for (int i = 0; i < seqlist->size; i++)
        printf("%d  ", seqlist->a[i]);
    printf("\n");
}
//主函数
int main()
{
    SeqList seqlist;         //声明顺序表
    listInitiate(&seqlist);  //分配实地空间
    listOriginal(&seqlist);  //往顺序表里面放10个数
    listPrint(&seqlist);     //打印顺序表所有数据
    int number;
    printf("请输入要查找的数:");
    scanf("%d",&number);
    if( listFind(&seqlist,number) != -1)
       printf("该数在顺序表中的下标值为:%d\n",listFind(&seqlist,number));
    else
       printf("顺序表中不存在该数据元素\n");
    return 0;
}
[/prism]

运行结果:

(1)能找到相同数据

(2)不能找到相同数据


代码编译器:Dev-C++

Archives QR Code Tip
QR Code for this page
Tipping QR Code