算法设计学习:顺序表算法

来源:互联网 发布:淘宝内裤买家秀男露丁 编辑:程序博客网 时间:2024/06/05 16:00

(1)题目:已知一个顺序表L,其中的元素递增有序排列,设计算法,插入元素x(x 为int型)后保持该顺序表仍然递增有序排列。假设插入操作总能成功,即插入插入后表长不会大于maxSize

分析:分为两步

1)找出让顺序表有序的插入位置

2)将第一步上找出的位置上以及其后的元素往后移动一个位置,将 x 放在腾出的位置上。

代码

typedef struct{int data[maxSize];int length;} SqList;//1)定位元素int locateElem( SqList L, int x ){int i;  //因为 i 在for循环外还要使用,因此在for前声明for (  i = 1; i <= L.length; i ++ ){if ( x < L.data[i] ){return i;  // 顺序表中元素从小到大,看 x 是否小于当前元素,如果小于则放回当前位置 i}}return i;// 若是不存在比 x 大的元素,则将 x 插入到 表尾元素之后。}//2)移位,插入元素void insertElem(SqList &L, int x){int pos = locateElem( L, x );  //插入位置posint i;for( i = L.length; i >= pos; -- i ){L.data[i + 1] = L.data[i];  //从右往走,逐个向后移动}L.data[pos] = x;//在 位置pos 放置 元素x ++ (L.length); //表长自增 1}
总结

1)第一步来自顺序表的  按元素值的查找算法

2)第二部来自顺序表的  插入数据元素的算法


(2)题目

删除顺序表L中下标为p ( 1 <= p <= length )的元素,成功放回1,否则返回0,并将删除的元素的值赋值给 e

代码

int deleteElem(SqList &L, int p, int &e){if ( p < 1 || p > L.length ){return 0;}e =  L.data[p]; //赋值 eint i;for ( i = p; i < L.length; ++ i ){L.data[i] = L.data[i + 1];  // 从左到右,依从想前移动}-- (L.length);//表长 自减 1return 1;}
0 0
原创粉丝点击