第1章第1节练习题3 删除指定元素
2016-01-06 16:31
253 查看
问题描述
长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为e的数据元素算法思想1
用k记录顺序表L中不等于e的元素个数(即需要保存的元素个数),边扫描边统计k,并将不等于e的元素向前放置到k的位置上,最后修改顺序表的长度。算法描述
[code]void DelX(SqList *L, ElemType e) { int k=0, i; for(i=0;i<L->length;i++){ if(L->data[i]!=e){ L->data[k++]=L->data[i]; } } L->length=k; }
具体代码见附件1
算法思想2
用k记录顺序表L中等于e的元素个数,边扫描边统计k,并将不等于e的元素向前移k个位置,最后修改L的长度。算法描述
[code]void DelX(SqList *L, ElemType e) { int k=0, i=0; while(i<L->length){ if(L->data[i]==e){ k++; }else{ L->data[i-k]=L->data[i]; } i++; } L->length=L->length-k; }
具体代码见附件2
附件1
[code]#include<stdio.h> #define MaxSize 100 typedef int ElemType; typedef struct{ ElemType data[MaxSize]; int length; }SqList; int DelX(SqList *, ElemType); void print(SqList *); int main(int argc, char* argv[]) { SqList SL; SL.length=10; for(int i=0;i<SL.length;i++){ SL.data[i]=2*i+1; } ElemType e=5; int flag; print(&SL); flag=DelX(&SL, e); print(&SL); if(flag==0){ printf("Delete Success!\n"); }else{ printf("Find not the number!\n"); } return 0; } int DelX(SqList *L, ElemType e) { int k=0, i; for(i=0;i<L->length;i++){ if(L->data[i]!=e){ L->data[k++]=L->data[i]; } } if(L->length==k){ return -1; }else{ L->length=k; return 0; } } void print(SqList *L) { for(int i=0;i<L->length;i++){ printf("%d\t",L->data[i]); } printf("\n"); }
附件2
[code]#include<stdio.h> #define MaxSize 100 typedef int ElemType; typedef struct{ ElemType data[MaxSize]; int length; }SqList; void DelX(SqList *, ElemType); void Print(SqList *); int main(int argc, char* argv[]) { SqList SL; SL.length=10; for(int i=0;i<SL.length;i++){ SL.data[i]=2*i+1; } ElemType e=5; Print(&SL); DelX(&SL, e); Print(&SL); return 0; } void DelX(SqList *L, ElemType e) { int k=0, i=0; while(i<L->length){ if(L->data[i]==e){ k++; }else{ L->data[i-k]=L->data[i]; } i++; } L->length=L->length-k; } void Print(SqList *L) { for(int i=0;i<L->length;i++){ printf("%d\t",L->data[i]); } printf("\n"); }
相关文章推荐
- JAVA WEB前端杂汇
- ORA-01000: 超出打开游标的最大数 问题的分析和解决
- 泛型数组列表与反射
- 自定义UIView动画效果
- 容斥原理
- Android初学习 - AsyncTask的一些介绍I
- 做过的最短路径集合
- android使用5.0的toolbar,自定义布局参考地址
- 【bzoj4320】【ShangHai2006 Homework】【并查集+离线处理】
- 【poj2823】Sliding Window
- python 實現楊輝三角
- 利用反射实现对sqlite3数据库的crud(增删改查)操作的一个baseAndroidDao封装,安卓开发中
- C++编写ActiveX ocx控件在网页中调用失败问题
- CXF3.0.2+Spring3.2.14 WebService入门实例三
- HDU2586 How far away ?(LCA模板题)
- cocoapods
- php jquery pjax示例源码 (ajax请求,并改变url)
- 超融合架构 — Hyper Converged Infrastructure 小记
- shell中读取配置文件之eval
- socket编程原理