顺序表内查找元素

//算法功能: 分别按序号和按内容在顺序表中查找元素
//算法思路:
//GetElem(SqList &L, int i)查找顺序表L中第i个数据元素,直接在表中定位,并返回L.elem[i-1]
//LocateElem(SqList &L, ElemType e)查找顺序表L中与给定值e相等的数据元素,若找到
//与e相等的第1个元素则返回该元素在顺序表中的序号;否则查找失败返回0


#include <stdio.h>
#include <stdlib.h>


#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10


typedef int ElemType;
typedef int Status;


//定义顺序表存储结构
typedef struct
{
        ElemType *elem;
        int length;
        int listsize;
}SqList;


//初始化顺序表
Status InitList_Sq(SqList &L)
{
        L.elem = (ElemType*) malloc (LIST_INIT_SIZE * sizeof(ElemType));
        if(!L.elem)
                exit(ERROR);
        L.length = 0;
        L.listsize = LIST_INIT_SIZE;
        return OK;
}




//创建顺序表
void Create_SqList(SqList &L)
{
        int c, i = 0;
        int *newBase;
        printf("请输入顺序表元素,按Ctrl+Z结束:\n");
        while(scanf("%d", &c) != EOF)
        {
                if(i >= L.listsize)
                {
                        newBase = (ElemType *) realloc (L.elem, (L.listsize + LISTINCREMENT) * sizeof(ElemType));
                        //为初始顺序表以LISTINCREMENT大小重新增加存储空间
                        if(!newBase)
                                exit(OVERFLOW);
                        L.elem = newBase;
                        L.listsize += LISTINCREMENT;
                }
                L.elem[i++] = c;
        }
        L.length = i;
        printf("输入的顺序表元素是:\n");
        for(i = 0; i < L.length; i++)  //输出新建顺序表
                printf("%d ", L.elem[i]);
        printf("\n");
}




//返回指定位置的元素
ElemType GetElem(SqList &L, int i)
{
        ElemType *e;
        if(!L.elem || i > L.length || i < 1)
                exit (ERROR);
        e = L.elem+i-1;
        return *e;
}


//定位指定元素,如果有,返回第一个匹配的元素的位置
int LocateElem(SqList &L, ElemType e)
{
        int i;
        if(!L.elem)
                exit (ERROR);
        for(i = 0; i < L.length; i++)
                if(e == L.elem[i])
                        return i+1;
        return 0;
}


int main()
{
        SqList L;
        int location, element;
        if(!InitList_Sq(L))
        {
                printf("初始化顺序表失败!\n");
                exit(ERROR);
        }
        Create_SqList(L);
        //按序号查找
        printf("输入查找的位置:");
        scanf("%d", &location);
        while(location > L.length+1 || location < 1)
        {
                printf("输入位置错误,请重新输入!\n");
                scanf("%d", &location);
        }
        printf("第%d个元素是: %d\n", location, GetElem(L, location));


        //按内容查找
        printf("输入查找的元素:");
        scanf("%d", &element);
        if(!LocateElem(L, element))
                printf("该顺序表中没有%d这个元素。\n", element);
        else
                printf("%d在顺序表中是第%d个元素\n", element, LocateElem(L, element));
        return 0;
}

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Python,我们可以使用顺序表来存储一组元素顺序表是一种线性表的实现方式,元素在内存是连续存储的。 要在顺序表查找元素,可以使用遍历的方式逐个比较元素,直到找到目标元素或遍历完整个表。具体的步骤如下: 1. 首先,我们需要定义一个顺序表,可以使用Python的列表(list)来表示。例如,我们有一个顺序表lst = [1, 3, 5, 7, 9]。 2. 然后,我们需要定义一个目标元素,即要查找元素。例如,我们要查找元素target = 5。 3. 接下来,我们可以使用for循环遍历顺序表的每个元素。在每次循环,我们可以逐个比较当前元素是否与目标元素相等。如果相等,说明找到了目标元素,可以返回该元素的索引值。 4. 如果遍历完整个顺序表都没有找到目标元素,则表示目标元素不存在于顺序表。 下面是一个实现顺序表查找元素的Python代码示例: ```python def search_element(lst, target): for i in range(len(lst)): if lst[i] == target: return i return -1 # 表示目标元素不存在 lst = [1, 3, 5, 7, 9] target = 5 result = search_element(lst, target) if result != -1: print("目标元素顺序表的索引为:", result) else: print("目标元素不存在于顺序表") ``` 这段代码首先定义了一个名为search_element的函数,它接受两个参数lst和target,分别表示顺序表和目标元素。在函数内部,使用for循环遍历顺序表的每个元素,通过比较判断是否找到了目标元素。如果找到了,则返回该元素的索引值;如果遍历完整个顺序表都没有找到,则返回-1表示目标元素不存在。 最后,我们使用定义好的函数search_element来查找目标元素5在顺序表lst的索引,并根据返回值判断是否找到了目标元素

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值