数据结构考研学习笔记(二)---顺序表应用

Lala ·
更新时间:2024-11-13
· 857 次阅读

**1.设计一个高效算法,将顺序表L得所有元素逆置,要求算法的空间复杂度为O(1) 2.线性表(a1,a2,…,an)中的元素递增有序且按顺序存储于计算机内。要求设计一算法,完成用最少时间在表中查找数值为x的元素,若找到则将其后继元素位置相交换,若找不到则将其插入表中并使表中元素递增有序**

本章节承接上一篇博客点击
下面展示一些 逆置

void Reverse(SqList L) { ElemType temp; for (int i = 0; i < L.length / 2; i++) { temp = L.data[i]; L.data[i] = L.data[L.length - i - 1]; L.data[L.length - i - 1] = temp; } }

下面展示一些 查询更改位序

void SearchExchangeInsert(ElemType A[] , ElemType x, SqList L) { int low = 0, high = L.length - 1, mid; int t; while (low <= high) { mid = (low + high) / 2; if (A[mid] == x) break; else if (A[mid] high) { int i; for ( i = L.length-1 ; i > high; i--) A[i + 1] = A[i]; A[i] = x; } } 原代码

下面展示一些 内联代码片

typedef struct { ElemType *data; int MaxSize , length; }SqList; /*---------------------------------------------------------------------------------------------------- 1.设计一个高效算法,将顺序表L得所有元素逆置,要求算法的空间复杂度为O(1) ------------------------------------------------------------------ 算法思想:扫描顺序表L得前半部分元素,对于元素L.data[i](0<=i<L.length/2),将其后半部分得对应元素L.data[L.length-i-1]进行交换。 --------------------------------------------------------------------------------------------------- */ void Reverse(SqList L) { ElemType temp; for (int i = 0; i < L.length / 2; i++) { temp = L.data[i]; L.data[i] = L.data[L.length - i - 1]; L.data[L.length - i - 1] = temp; } } /*---------------------------------------------------------------------------------------------------- 2.线性表(a1,a2,...,an)中的元素递增有序且按顺序存储于计算机内。要求设计一算法,完成用最少时间在表中查找数值为x 的元素,若找到则将其后继元素位置相交换,若找不到则将其插入表中并使表中元素递增有序 --------------------------------------------------------------------------------------------------- 解放思想:顺序存储的线性表递增有序,可以顺序查找,也可以折半查找,题目要求“用最少的时间在表中查找数值为x的元素”,所以这 里使用的折半查找 --------------------------------------------------------------------------------------------------- */ void SearchExchangeInsert(ElemType A[] , ElemType x, SqList L) { int low = 0, high = L.length - 1, mid; int t; while (low <= high) { mid = (low + high) / 2; if (A[mid] == x) break; else if (A[mid] high) { int i; for ( i = L.length-1 ; i > high; i--) A[i + 1] = A[i]; A[i] = x; } } int main(void) { SqList L; ElemType e = 1;; L.length = 11; L.data = (ElemType*)malloc(sizeof(ElemType)*InitSize); for (int i = 0; i < L.length; i++) L.data[i] = i; for (int i = 0; i < L.length; i++) printf("%d ", L.data[i]); printf("\n%d\n", L.length); Reverse(L); for (int i = 0; i < L.length; i++) printf("%d ", L.data[i]); printf("\n%d", L.length); printf("\n查询11,并置换后一位,找不到 就插入应在的递增顺序位置:\n"); Reverse(L); L.data[5] = 7; L.data[6] = 7; SearchExchangeInsert(L.data,5,L); for (int i = 0; i < L.length; i++) printf("%d ", L.data[i]); printf("\n%d\n", L.length); getchar(); getchar(); return 0; }

工程地址:后续更新

sf9090 原创文章 19获赞 64访问量 9665 关注 私信 展开阅读全文
作者:sf9090



学习笔记 考研 数据 学习 顺序表 数据结构

需要 登录 后方可回复, 如果你还没有账号请 注册新账号