6-4 链式表的按序号查找 (10分)

这篇博客详细介绍了如何实现一个函数,用于在单链表中查找指定位置K的元素。函数接口和List结构被定义,并提供了一个裁判测试程序样例,包括输入和预期输出。
摘要由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 <stdio.h>
#include 
好的,以下是基于C语言的线性实现,包含你所要求的函数: ```c #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 // 线性的最大长度 typedef int ElementType; // 元素类型 typedef int Position; // 位置 typedef struct { ElementType data[MAXSIZE]; // 存储元素的数组 int length; // 当前线性的长度 } List; // 初始化一个新的空线性 List MakeEmpty() { List L; L.length = 0; return L; } // 根据指定的位序K,返回L中相应元素 ElementType FindKth(List L, int K) { if (K < 1 || K > L.length) { printf("Error: K out of range.\n"); exit(1); } return L.data[K - 1]; } // 已知X,返回线性L中与X相同的第一个元素的位置;若不存在则返回错误信息 Position Find(List L, ElementType X) { for (int i = 0; i < L.length; i++) { if (L.data[i] == X) { return i + 1; } } return -1; // 返回-1示未找到 } // 在L的指定位置P前插入一个新元素X;成功则返回true,否则返回false bool Insert(List *L, ElementType X, Position P) { if (L->length == MAXSIZE) { printf("Error: List is full.\n"); return false; } if (P < 1 || P > L->length + 1) { printf("Error: Invalid position.\n"); return false; } for (int i = L->length; i >= P; i--) { L->data[i] = L->data[i - 1]; } L->data[P - 1] = X; L->length++; return true; } // 从L中删除指定位置P的元素;成功则返回true,否则返回false bool Delete(List *L, Position P) { if (P < 1 || P > L->length) { printf("Error: Invalid position.\n"); return false; } for (int i = P - 1; i < L->length - 1; i++) { L->data[i] = L->data[i + 1]; } L->length--; return true; } // 返回线性L的长度 int Length(List L) { return L.length; } int main() { List L = MakeEmpty(); // 初始化一个新的空线性 Insert(&L, 23, 1); Insert(&L, 29, 2); Insert(&L, 20, 3); Insert(&L, 32, 4); Insert(&L, 23, 5); Insert(&L, 21, 6); Insert(&L, 33, 7); Insert(&L, 25, 8); printf("Length of L: %d\n", Length(L)); printf("Element at position 3: %d\n", FindKth(L, 3)); printf("Position of 23: %d\n", Find(L, 23)); Delete(&L, 5); printf("Length of L after deleting element at position 5: %d\n", Length(L)); return 0; } ``` 输出结果为: ``` Length of L: 8 Element at position 3: 20 Position of 23: 1 Length of L after deleting element at position 5: 7 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值