2.2线性表的顺序表示和实现(2)待修改
来源:互联网 发布:电脑打字软件有哪些 编辑:程序博客网 时间:2024/06/15 05:01
Status ListInsert_Sq(SqList &L,int i,ElemType e){ //在顺序线性表L中第i个位置之前插入新的元素e //i的合法值为1<=i<=ListLength_Sq(L)+1 if(i<1||i>L.length)return ERROR;//i 值不合法 if(L.length >= L.listsize) { newbase = (ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType)); if(!newbase)exit(OVERFLOW);//存储分配失败 L.elem = newbase; L.listsize + = LISTINCREMENT;//增加存储容量 } q=&(L.elem[i-1]); //q为插入位置 for(p=&(L.elem[L.length-1]);p>=q;--p) *(p+1)=*p; //插入位置及之后的元素移动 *q = e;//插入e ++L.length //表长增1 return OK;}///* 表示从链表的第i个元素开始一直到最后一个元素往后移一位 p=&L.elem[L.length-1]意思是p赋初值为链表的最后一个元素地址, p>=q表示循环知道p<q的时候结束,--p是使p指针的指向往前移一位*/
删除第i个元素时,需要从第i+1至第n(共n-i)个元素依次向前移动一个位置
Status ListDelete_Sq(SqList &L,int i,ElemType &e){ //在顺序线性表L中删除第i个元素,并用e返回其值 //i的合法值为1<=i<=ListLength.Sq(L) if(i<1||(i>L.length)) return ERROR; //i值不合法 p = &(L.elem[i-1]); //p为被删除元素的位置 e = *p; //被删除的元素的值赋给e q = L.elem+L.length-1; //表尾元素的位置 for (++p;p<=q ;++p) { *(p-1)=*p; } --L.length; return OK;}//ListDelete_Sq
整个代码片中卡在两个for循环的操作上。
for(p=&(L.elem[L.length-1]);p>=q;--p) *(p+1)=*p; //插入位置及之后的元素移动
for (++p;p<=q ;++p) { *(p-1)=*p; }
int LocateElem_Sq(SqList L,ElemType e,Status(*compare)(ElemType,ElemType))//在顺序表中线L中查找第一个值与e满足compore()元素的位置顺序{//若找到,则返回其在L中的位序,否则返回0i=1;//i的初值为第一个元素的位序p=L.elem;//初值为第一个元素的存储位置while(i<=L.length&&!(*compare)(*p++,e))++i;if(i<=L.length) return i;else return 0;}//LocateElem_Sq
void MergeList_Sq(SqList La,SqList Lb,SqList &Lc)//已经顺序线性表La和Lb的元素按值非递减排列{ pa = La.elem;pb = Lb.elem; Lc.listsize = Lc.length = La.length+Lb.length; pc = Lc.elem = (ElemType*)malloc(Lc.listsize*sizeof(ElemType)); if(!Lc.elem)exit(OVERFLOW) pa_last = La.elem+La.length-1; pb_last = Lb.elem+Lb.length-1; while(pa<=pa_last&&pb<=pb_last) { if(*pa<=*pb) *pc++=*pa++; else *pc++ = *pb++ } while(pa<=pa_last)*pc++=*pa++; //插入La剩余的元素 while(pb<=pb_last)*pc++=*pb++; //插入Lb剩余的元素}//MergeList
阅读全文
0 0
- 2.2线性表的顺序表示和实现(2)待修改
- 2.2线性表的顺序表示和实现(1)
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- [FAQ17703]modem [ASSERT] file:custom_config_check.c问题排查
- 找到二叉树中的最大搜索二叉子树
- Spring系列之Spring常用注解总结
- Why can't g++ find iostream.h?
- 我爱学Java之Pattern和Matcher用法
- 2.2线性表的顺序表示和实现(2)待修改
- MFC中全局变量exterm用法
- 解决Nginx跨域访问
- 用windows系统机子向Linux机子传输文件,用xftp,如果连接不上
- 请判断A+B是否大于C。
- WdatePicker文档2
- DHCP概述
- 中断—什么是中断
- maven常用命令