欢迎使用CSDN-markdown编辑器
2016-07-23 20:34
316 查看
顺序表重难疑点
储存结构
#define MAXSIZE 100 typedef struct { ElemType * elem; //储存空间基地址指针 int length; //当前元素个数 }SqList;
初始化
Status InitList(SqList &L); { L.elem=new ElemType[MAXSIZE]; if(!L.elem) exit(OVERFLOW); L.length=0; return OK; }
取值
Status GetElem(SqList L,int i,ElemType & e) { if(i<1||i>L.length)return ERROE; e=L.elem[i-1]; return OK; }
查找
int LocateElem(SqList L,ElemType e) { for(int i=0;i<L.length;i++) { if(L.elem[i]==e)return i+1; return 0; } }
如何避免新手for循环错误:
由 for( 初始化 ; 条件表达式 ; 迭代表达式 ){ 循环体 }回忆for每轮循环执行顺序:
1.执行【条件表达式】,如果其值为真继续,否则结束循环
2.执行【循环体】
3.执行【迭代表达式】,回到1
找用到迭代变量i的地方:L.elem[i],范围是0到L.length-1
即0 <= i < L.length或0<= i<=L.length-1
初始化表达式为:i=0 ,条件表达式为:i < L.length
当i=length时,(i < L.length)为false,终止循环
插入
可以插入第1到第length+1个元素位置(到最后一个元素后面的位置),插入到第i个元素的位置时,原本该位置的元素以及后面的元素全部后移第i个元素对应的索引是i-1
数组最后一个元素的索引是length-1
用 j 定位每轮要后移的元素位置,用j+1定位该元素移向的位置
L.elem[j+1]=L.elem[j];
j定位第1到第length+1个元素位置,j的范围是length-1到i-1
即int j=length-1 而 j>=i-1
Status ListInsert(SqList &L,int i,ElemType e) { if(i<1||i>L.length+1))return ERROR; if(L.length==MAXSIZE)return ERROR;//数组已满,不能再插入 for(j=L.length-1;j>=i-1;j--) L.elem[j+1]=L.elem[j]; L.elem[i-1]=e; ++L.length; return OK; }
删除
只可以删除第1到第length个元素(与插入有区别)删除第i个元素时,只要将该位置的元素后面的元素逐一前移一个单位,该元素会被覆盖掉
用j定位要前移的元素,即要移向的位置的后面一单位
L.elem[j-1]=L.elem[j];
所以int j=i-1+1=i,j < length-1
Status ListDelete(SqList &L,int i) { if(i<1||i>L.length)return ERROR; for(int j=i;j<=L.length-1;j++)L.elem[j-1]=L.elem[j]; --L.length; return OK; }
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C#数据结构之顺序表(SeqList)实例详解
- C#递归算法之分而治之策略
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#算法之大牛生小牛的问题高效解决方法
- Lua教程(七):数据结构详解
- C#算法函数:获取一个字符串中的最大长度的数字
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 经典排序算法之冒泡排序(Bubble sort)代码