欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 数据结构常考基础代码题-顺序表有序插入

数据结构常考基础代码题-顺序表有序插入

2024/10/26 1:19:22 来源:https://blog.csdn.net/qq_52291558/article/details/142989172  浏览:    关键词:数据结构常考基础代码题-顺序表有序插入

顺序表递增有序,插入元素 x,仍递增有序

第一步:定义顺序表结构体

根据题目中的“顺序表递增有序”,我们需要定义一个顺序表结构体,用于存储元素和顺序表的相关信息。

typedef struct {int *data; // 动态数组存储元素int length; // 顺序表当前长度int size; // 顺序表的最大容量
} Sqlist;

第二步:实现查找插入位置的函数

根据题目中的“插入元素 x”,我们需要实现一个函数 find,用于在列表里一直往前找到第一个不小于 x 的数的索引。

int find(Sqlist L, int x) {int i = 0;for (; i < L.length; i++) {if (x <= L.data[i]) {break;}}return i; // 返回找到的位置
}

第三步:实现插入元素的函数

根据题目中的“插入元素 x,仍递增有序”,我们需要实现一个函数 insert,用于将元素 x 插入到顺序表中,并保持顺序表的递增有序性。

void insert(Sqlist *L, int x) {int p = find(*L, x); // 找到插入位置// 如果顺序表已满,需要扩容if (L->length == L->size) {L->size = L->size * 2 + 1; // 扩容策略int *newData = (int *)realloc(L->data, L->size * sizeof(int));if (!newData) {exit(-1); // 内存分配失败,退出程序}L->data = newData;}// 将p位置及之后的元素向后移动for (int j = L->length; j > p; j--) {L->data[j] = L->data[j - 1];}// 插入元素xL->data[p] = x;L->length++; // 更新顺序表长度
}

第四步:在 main 函数中测试插入操作

最后,我们需要在 main 函数中创建顺序表并测试插入操作,以确保代码的正确性。

int main() {Sqlist L;L.size = 10; // 初始化最大容量L.length = 0;L.data = (int *)malloc(L.size * sizeof(int));if (!L.data) {exit(-1); // 内存分配失败,退出程序}// 插入元素insert(&L, 5);insert(&L, 3);insert(&L, 8);// 打印顺序表for (int i = 0; i < L.length; i++) {printf("%d ", L.data[i]);}printf("\n");// 释放内存free(L.data);return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com