完成程序 1. List MakeEmpty():初始化一个新的空线性表。 2.ElementType FindKth( List L, int K ):根据指定的位序K,返回L中相应元素。 3.Position Find( List L, ElementType X ):已知X,返回线性表L中与X相同的第一个元素的位置;若不存在则返回错误信息。 4.bool Insert( List L, ElementType X, Position P ):在L的指定位置P前插入一个新元素X;成功则返回true,否则返回false。 5.bool Delete( List L, Position P ):从L中删除指定位置P的元素;成功则返回true,否则返回false。 6.int Length( List L ):返回线性表L的长度。 4、测试数据 23、29、20、32、23、21、33、25
时间: 2024-02-25 13:59:23 浏览: 68
138-3-0若使用循环链表来表示队列,p是链表中的一个指针.试基于此结构给出队列的插入、删除和判空算法1
好的,以下是基于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
```
阅读全文