1.线性表的基本表示
一个数据结构的基本操作是指其最核心、最基本的操作。其他较复杂的操作可通过调用其基
本操作来实现。线性表的主要操作如下。
● InitList(&L):初始化表。构造一个空的线性表。
· Length(L):求表长。返回线性表L的长度,即L中数据元素的个数。
● LocateElem(L,e):按值查找操作。在表I中查找具有给定关键字值的元素。
·GetElem(L,i):按位查找操作。获取表工中第i个位置的元素的值。
· ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。
● ListDelete(6L,i,se):删除操作。删除表工中第1个位置的元素,并用e返回删除元素的值。
· PrintList(L):输出操作。按前后顺序输出线性表工的所有元素值。
● Empty(L):判空操作。若I为空表,则返回 true,否则返回 false。
● DestroyList(6L):销毁操作。销毁线性表,并释放线性表工所占用的内存空间。
2.顺序表上的基本操作的实现
2.1顺序表的初始化
// 初始化线性表
void initList(SeqList* L) {
L->length = 0;
}
2.2插入操作
// 插入元素
int ListInsert(SeqList* L, int i, int e) {
if (i < 0 || i > L->length) {
return 0; // 插入位置非法
}
if (L->length >= MAX_SIZE) {
return 0; // 线性表已满
}
for (int j = L->length; j > i; j--) {
L->data[j] = L->data[j - 1]; // 将后续元素向后移动一位
}
L->data[i] = e; // 插入元素
L->length++; // 线性表长度加1
return 1; // 插入成功
}
2.3删除操作
// 删除元素
int ListDelete(SeqList* L, int i) {
if (i < 0 || i >= L->length) {
return 0; // 删除位置非法
}
for (int j = i; j < L->length - 1; j++) {
L->data[j] = L->data[j + 1]; // 将后续元素向前移动一位
}
L->length--; // 线性表长度减1
return 1; // 删除成功
}
2.4查找操作
2.4.1按值查找
// 按值查找元素
int LocateElem(SeqList* L, int e) {
for (int j = 0; j < L->length; j++) {
if (L->data[j] == e) {
return j; // 返回元素下标
}
}
return -1; // 未找到元素
}
2.4.2按位查找
// 按位查找元素
int GetElem(SeqList* L, int i) {
if (i < 0 || i >= L->length) {
return -1; // 查找位置非法
}
return L->data[i]; // 返回元素值
}
2.5main主函数
int main() {
SeqList list;
initList(&list);
// 输入数据
int n;
printf("请输入线性表长度: ");
scanf("%d", &n);
printf("请输入线性表元素:");
for (int i = 0; i < n; i++) {
int x;
scanf("%d", &x);
ListInsert(&list, i, x);
}
// 插入元素
int i, e;
printf("请输入要插入的元素下标和值: ");
scanf("%d %d", &i, &e);
if (ListInsert(&list, i, e)) {
printf("插入成功\n");
} else {
printf("插入失败\n");
}
// 删除元素
printf("请输入要删除的元素下标: ");
scanf("%d", &i);
if (ListDelete(&list, i)) {
printf("删除成功\n");
} else {
printf("删除失败\n");
}
// 按位查找元素
printf("请输入要查找的元素下标: ");
scanf("%d", &i);
int e_by_i = GetElem(&list, i);
if (e_by_i == -1) {
printf("按位查找失败\n");
} else {
printf("按位查找成功,元素值为%d\n", e_by_i);
}
// 按值查找元素
printf("请输入要查找的元素值: ");
scanf("%d", &e);
int i_by_e = LocateElem(&list, e);
if (i_by_e == -1) {
printf("按值查找失败\n");
} else {
printf("按值查找成功,元素下标为%d\n", i_by_e);
}
return 0;
}
3.运行结果
3.1输入数据
3.2插入
3.3删除
3.4查找
3.4.1按值查找
3.4.2按位查找
4.完整代码
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int length;
} SeqList;
// 初始化线性表
void initList(SeqList* L) {
L->length = 0;
}
// 插入元素
int ListInsert(SeqList* L, int i, int e) {
if (i < 0 || i > L->length) {
return 0; // 插入位置非法
}
if (L->length >= MAX_SIZE) {
return 0; // 线性表已满
}
for (int j = L->length; j > i; j--) {
L->data[j] = L->data[j - 1]; // 将后续元素向后移动一位
}
L->data[i] = e; // 插入元素
L->length++; // 线性表长度加1
return 1; // 插入成功
}
// 删除元素
int ListDelete(SeqList* L, int i) {
if (i < 0 || i >= L->length) {
return 0; // 删除位置非法
}
for (int j = i; j < L->length - 1; j++) {
L->data[j] = L->data[j + 1]; // 将后续元素向前移动一位
}
L->length--; // 线性表长度减1
return 1; // 删除成功
}
// 按位查找元素
int GetElem(SeqList* L, int i) {
if (i < 0 || i >= L->length) {
return -1; // 查找位置非法
}
return L->data[i]; // 返回元素值
}
// 按值查找元素
int LocateElem(SeqList* L, int e) {
for (int j = 0; j < L->length; j++) {
if (L->data[j] == e) {
return j; // 返回元素下标
}
}
return -1; // 未找到元素
}
int main() {
SeqList list;
initList(&list);
// 输入数据
int n;
printf("请输入线性表长度: ");
scanf("%d", &n);
printf("请输入线性表元素:");
for (int i = 0; i < n; i++) {
int x;
scanf("%d", &x);
ListInsert(&list, i, x);
}
// 插入元素
int i, e;
printf("请输入要插入的元素下标和值: ");
scanf("%d %d", &i, &e);
if (ListInsert(&list, i, e)) {
printf("插入成功\n");
} else {
printf("插入失败\n");
}
// 删除元素
printf("请输入要删除的元素下标: ");
scanf("%d", &i);
if (ListDelete(&list, i)) {
printf("删除成功\n");
} else {
printf("删除失败\n");
}
// 按位查找元素
printf("请输入要查找的元素下标: ");
scanf("%d", &i);
int e_by_i = GetElem(&list, i);
if (e_by_i == -1) {
printf("按位查找失败\n");
} else {
printf("按位查找成功,元素值为%d\n", e_by_i);
}
// 按值查找元素
printf("请输入要查找的元素值: ");
scanf("%d", &e);
int i_by_e = LocateElem(&list, e);
if (i_by_e == -1) {
printf("按值查找失败\n");
} else {
printf("按值查找成功,元素下标为%d\n", i_by_e);
}
return 0;
}