第5章-数组、字符串、指针.ppt
文本预览下载声明
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 5.8.3 插入法 例5-26 把一个给定的数据x按大小顺序插入已排好序的数组中,插入后数组元素仍然有序。 编程分析:设n个有序数据(从小到大)存放在数组a[0]—a[n-1]中,要插入的数x。首先确定x插在数组中的位置p。 (1)首先确定x插在数组中的位置p,实现的语句如下。 for(p=0; pn ; p++) if(xa[p])break; (2)a[p]—a[n]元素向后顺移一个位置以空出a[p]元素放入x,实现的语句如下。 for (i=n; i= p; i--) a[i]=a[i-1], a[p]=x; 实现插入的完整程序如下(数组方法): #define N 10 // N代表数据的个数 void main() { int a[N+1]={1,4,7,13,16,19,28,36,49,60}; // 定义N+1个元素的数组 int x,p,i; printf( Befor Inserted:\n); for(i=0;iN;i++) // 输出插入前的数据序列 printf( %d ,a[i]); printf(\n); printf( please input the number you want Insert data x\n); scanf(%d,x); printf(\n); p=0; while(xa[p]pN) // 确定x所插入的位置 p++; for(i=N; ip; i--) // 将元素往后移,空出x所在的位置 a[i]=a[i-1]; a[p]=x; // 将x插入到数组中 printf( After Inserted:\n); for(i=0;i=N;i++) // 输出插入后的数据序列 printf( %d ,a[i]); } 5.8.3 插入法 方法二:使用指针法 编程分析:设n个有序数据(从小到大)存放在数组a[0]~a[n-1]中,要插入的数x。 1)定义指针变量p,q,分别让其指向数组首部和最后一个元素,首先确定x插在数组中的位置p,实现的语句如下: for(p=a; pq ; p++) if(x *p)break; 2)a[p]~a[n]元素向后顺移一个位置以空出a[p]元素(即指针p指向的元素),将x存入到a[p],即实现插入。实现的语句如下: for (q=a+N; q p; q--) *q =*(q-1), *p=x; 使用指针法实现插入的完整程序如下 5.8.3 插入法 #define N 10 //N代表数据的个数 void main() { int a[N+1]={1,4,7,13,16,19,28,36,49,60}; int x, *p, *q; p=a ; q=a+N; //使用指针p、q分别指向数组首元素和末元素 printf( Befor Inserted:\n); for(;pq;p++) //输出插入前的数据序列 printf( %d ,*p); printf(\n); printf( please input the number data x\n); scanf(%d,x); printf(\n); //让指针p再次指向数组首部 for(p=a;pq;p++) if(x*p)break; //确定x所插入的位置 for(; qp; q--) //将元素往后移,空出x所在的位置 *q=*(q-1); *p=x; //将x插入到数组中 printf( After Inserted:\n); for(p=a; p=a+N; p++) //输出插入后的数据序列 printf( %d ,*p); } 思考与讨论: 1)比较使用指针法与下标法实现的数据插入的两个程序,理解计算机系统的执行过程,显然指针法执行的效率要高一些。 2)在使用指针法的程序中,为什么两次使用“p=a;”?另外,最后一个输出数组元素的for循环能否改成“for(p=a;p=q;p++)”,为什么?
显示全部