已知一组已经安排升序排列好的10个数,再输入一个数,将其插入这组数中,用数组编写.
请高手速给答案,谢谢
刚学数据结构不久顺便练练
/* 已知一组已经安排升序排列好的10个数,再输入一个数,将其插入这组数中,用数组编写. */ #include <stdio.h> #include <stdlib.h> typedef int DataType; #include "seqlist.h"
int main() { int i,k,k1,j,num; SeqList L; srand((int)time(0));
/*初始化随即*/
SetList(&L,11); /*构造函数*/
for(i=0;i<10;i++) InsertRear(&L,rand()%50);
/*随即赋10个值*/
/* 对数组排序 */ for(i=0;i<10;i++) { k=1; /* 记录是否发生交换 */
for(j=9;j>i;j--) { if(GetData(&L,j-1)>GetData(&L,j)) /* 如果前一元素大于后一元素,交换 */ { k=GetData(&L,j-1); k1=GetData(&L,j); SetData(&L,k1,j-1); SetData(&L,k,j); } }
if(k==1) /* 如果没发生交换退出 */ break; }
puts("Enter the number:"); /* 输入要插入的数字 */ scanf("%d",&num); printf("\n");
for(i=0;i<10;i++) { if(GetData(&L,i)>num) /* 找出比插入元素大的下标 */ break; }
Insert(&L,num,i); /* 在此下标处插入元素num */
for(i=0;i<11;i++) printf("%4d",GetData(&L,i));
return 0; }
#include <stdio.h> #include <stdlib.h> // for the malloc function #include <memory.h> // for the memcpy(...) int main() { const int N = 10; double num1[N] = {2,4,6,8,10,12,14,16,18,20}; // for test double aNum = 26;
// get the length this double array int length = sizeof(num1)/sizeof(double); // get the size for the new double array size_t size = (length+1)*sizeof(double);
// allocate the memory space for the new double array double * num2 = (double *)malloc(size);
memset(num2, 0, size);
// find out the appropriate the position to // insert the new value
int insertPos = 0; bool insert = true; for(int i = 0; i<N; i++) { if(aNum>num1) insertPos++; else if(aNum == num1) { insert = false; break; } else break; }
if(insert) { memcpy(num2, num1, insertPos*sizeof(double)); num2[insertPos] = aNum; memcpy(&num2[insertPos+1], &num1[insertPos], (N-insertPos)*sizeof(double)); // display for(int k = 0; k<N+1; k++) printf("%lf ", num2[k]); } else { for(int k = 0; k<N; k++) printf("%lf ", num1[k]); } printf("\n");
free(num2);
return 0; }
楼上的好厉害啊!