顺序表的基本操作
顺序表的基本操作
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#define maxsize 20
typedef int elemtype;
typedef struct {
elemtype* elem; // 存储空间的基地址
int length; // 当前长度
int capacity; // 当前分配的存储容量
} seqList;
// 初始化顺序表
void ListInit(seqList* L) {
L->elem = (elemtype*)malloc(maxsize * sizeof(elemtype));
L->length = 0;
L->capacity = maxsize;
}
// 获取顺序表的容量
int ListCapacity(seqList L) {
return L.capacity;
}
// 判断顺序表是否为空
int ListIsEmpty(seqList L) {
return L.length == 0;
}
// 查找元素 e 是否存在,存在返回 1,不存在返回 0
int ElemExist(seqList L, elemtype e) {
for (int i = 0; i < L.length; i++) {
if (L.elem[i] == e) {
return 1;
}
}
return 0;
}
// 获取指定位置的元素值
int GetElem(seqList L, int i, elemtype* e) {
if (i < 1 || i > L.length) {
return 0;
}
*e = L.elem[i - 1];
return 1;
}
// 查找元素并返回其在表中的位置
int LocateElem(seqList L, elemtype e) {
for (int i = 0; i < L.length; i++) {
if (L.elem[i] == e) {
return i + 1;
}
}
return 0;
}
// 将第 i 个位置元素修改为 e,成功返回 1,失败返回 0
int ListModify(seqList* L, int i, elemtype e) {
if (i < 1 || i > L->length) {
return 0;
}
L->elem[i - 1] = e;
return 1;
}
// 在指定位置插入元素
int ListInsert(seqList* L, int i, elemtype e) {
if (i < 1 || i > L->length + 1 || L->length == L->capacity) {
return 0;
}
for (int j = L->length - 1; j >= i - 1; j--) {
L->elem[j + 1] = L->elem[j];
}
L->elem[i - 1] = e;
L->length++;
return 1;
}
// 删除指定位置的元素
int ListDelete(seqList* L, int i, elemtype* e) {
if (i < 1 || i > L->length) {
return 0;
}
*e = L->elem[i - 1];
for (int j = i; j < L->length; j++) {
L->elem[j - 1] = L->elem[j];
}
L->length--;
return 1;
}
// 删除元素e
int ListRemove(seqList* L, elemtype e) {
int i = 0;
while (i < L->length && L->elem[i] != e) {
i++;
}
if (i == L->length) {
return 0; // 元素e不存在
}
for (int j = i + 1; j < L->length; j++) {
L->elem[j - 1] = L->elem[j];
}
L->length--;
return 1;
}
// 打印顺序表中的所有元素
void ListPrint(seqList L) {
for (int i = 0; i < L.length; i++) {
printf("%d ", L.elem[i]);
}
printf("\n");
}
int main() {
seqList L;
ListInit(&L);
printf("容量: %d\n", ListCapacity(L));
if (ListIsEmpty(L)) {
printf("列表为空。\n");
}
else {
printf("列表不为空。\n");
}
for (int i = 1; i <= 5; i++) {
ListInsert(&L, i, i);
}
printf("插入 1-5: ");
ListPrint(L);
elemtype e;
if (GetElem(L, 3, &e)) {
printf("获取第3个元素: %d\n", e);
}
else {
printf("有误\n");
}
if (ElemExist(L, 4)) {
printf("4在表里\n");
}
else {
printf("4不在表里\n");
}
int pos = LocateElem(L, 5);
if (pos > 0) {
printf("5的在表中的位置是: %d\n", pos);
}
else {
printf("未找到。\n");
}
if (ListModify(&L, 4, 10)) {
printf("将第4个元素改为10\n");
}
else {
printf("未找到\n");
}
printf("修改第4个元素后: ");
ListPrint(L);
if (ListDelete(&L, 4, &e)) {
printf("删除第4个元素: %d\n", e);
}
else {
printf("没有该位置\n");
}
printf("删除第四个元素后: ");
ListPrint(L);
if (ListRemove(&L, 3)) {
printf("删除元素3\n");
}
else {
printf("未找到.\n");
}
printf("移除元素3: ");
ListPrint(L);
return 0;
}
运行结果
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 咕噜
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果