pta数据结构实验在数组中查找指定元素_pta-数据结构与算法题目集(中文)--4-4 链式表的按序号查找...

该博客介绍如何实现一个函数FindKth,用于在单链表中查找第K个元素。函数接受一个链表L和一个整数K,返回链表的第K个元素,若元素不存在则返回ERROR。博客提供了示例代码和测试用例,包括链表的读取和遍历。
摘要由CSDN通过智能技术生成

本题要求实现一个函数,找到并返回链式表的第K个元素。

函数接口定义:

ElementType FindKth( List L, int K );

其中List结构定义如下:

typedef struct LNode *PtrToLNode;

struct LNode {

ElementType Data;

PtrToLNode Next;

};

typedef PtrToLNode List;

L是给定单链表,函数FindKth要返回链式表的第K个元素。如果该元素不存在,则返回ERROR。

裁判测试程序样例:

#include

#include

#define ERROR -1

typedef int ElementType;

typedef struct LNode *PtrToLNode;

struct LNode {

ElementType Data;

PtrToLNode Next;

};

typedef PtrToLNode List;

List Read(); /* 细节在此不表 */

ElementType FindKth( List L, int K );

int main()

{

int N, K;

ElementType X;

List L = Read();

scanf("%d", &N);

while ( N-- ) {

scanf("%d", &K);

X = FindKth(L, K);

if ( X!= ERROR )

printf("%d ", X);

else

printf("NA ");

}

return 0;

}

/* 你的代码将被嵌在这里 */

输入样例:

1 3 4 5 2 -1

6

3 6 1 5 4 2

输出样例:

4 NA 1 2 5 3

code:

#include

#include

#define ERROR -1

typedef int ElementType;

typedef struct LNode *PtrToLNode;

struct LNode {

ElementType Data;

PtrToLNode Next;

};

typedef PtrToLNode List;

List Read(); /* 细节在此不表 */

ElementType FindKth( List L, int K );

int main()

{

int N, K;

ElementType X;

List L = Read();

scanf("%d", &N);

while ( N-- ) {

scanf("%d", &K);

X = FindKth(L, K);

if ( X!= ERROR )

printf("%d ", X);

else

printf("NA ");

}

return 0;

}

List Read(){

int num = 0;

scanf( "%d",&num );

if( -1 == num ){

return NULL;

}

List list = ( List )malloc( sizeof( struct LNode ) );

List last = list;

list->Data = num;

list->Next = NULL;

scanf( "%d",&num );

while( -1 != num ){

PtrToLNode node = ( List )malloc( sizeof( struct LNode ) );

node->Data = num;

node->Next = NULL;

last->Next = node;

last = node;

scanf( "%d",&num );

}

return list;

}

//返回链式表的第K个元素。如果该元素不存在,则返回ERROR

ElementType FindKth( List L, int K ){

if( NULL == L ){

return ERROR;

}

if( K <= 0 ){

return ERROR;

}

PtrToLNode node = L;

int i = 1;

while( NULL != node && i < K ){

// printf( "data = %d\n",node->Data );

if( NULL == node->Next ){

break;

}

node = node->Next;

i++;

}

if( i< K ){

return ERROR;

}else{

return node->Data;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值