ps: 插入删除要小心,注意插入的位置pos。。。
白老师 OJ:
Input
第1行先输入n表示有n个数据,即n是实际长度;接着输入n个数据
第2行输入要插入的位置和新数据
第3行输入要插入的位置和新数据
第4行输入要删除的位置
第5行输入要删除的位置
第6行输入要查找的位置
第7行输入要查找的位置
Output
数据之间用空格隔开
第1行输出创建后的顺序表内容,包括顺序表实际长度和数据
每成功执行一次操作(插入或删除),输出执行后的顺序表内容
每成功执行一次查找,输出查找到的数据
如果执行操作失败(包括插入、删除、查找等失败),输出字符串error,不必输出顺序表内容
Sample Input
Sample Output
1 #include <stdio.h> 2 int A[10]; 3 int n; 4 void print(){ 5 printf("%d ", n); 6 int i; 7 for(i=0;i<n;++i) 8 printf("%d ", A[i]); 9 printf("\n"); 10 } 11 12 void insert(int pos, int value){ 13 int i; 14 pos--; 15 if(pos <0 || pos > n){printf("error\n"); return;} 16 for(i=n-1;i>=pos;--i){ 17 A[i+1] = A[i]; 18 } 19 A[pos] = value; 20 ++n; 21 print(); 22 } 23 24 void delete(int pos){ 25 int i; 26 pos--; 27 if(pos <0 || pos > n-1){printf("error\n"); return;} 28 for(i=pos;i<n;++i) 29 A[i] = A[i+1]; 30 --n; 31 print(); 32 } 33 34 void find(int pos){ 35 if(pos <1 || pos > n) {printf("error\n"); return;} 36 else printf("%d\n", A[pos-1]); 37 } 38 39 int main(int argc, char const *argv[]) 40 { 41 int t, i, pos, value; 42 scanf("%d", &n); 43 for(i=0;i<n;++i) 44 scanf("%d", &A[i]); 45 print(); 46 47 scanf("%d", &pos); 48 scanf("%d", &value); 49 insert(pos, value); 50 51 scanf("%d", &pos); 52 scanf("%d", &value); 53 insert(pos, value); 54 55 scanf("%d", &pos); 56 delete(pos); 57 58 scanf("%d", &pos); 59 delete(pos); 60 61 scanf("%d", &pos); 62 find(pos); 63 64 scanf("%d", &pos); 65 find(pos); 66 67 return 0; 68 }
Description
建立顺序表的类,属性包括:数组、实际长度、最大长度(设定为1000)
实现连续多个插入,即从位置i开始插入多个数据
实现连续多个删除,即从位置i开始删除多个数据
Input
第1行先输入n表示有n个数据,即n是实际长度;接着输入n个数据
第2行先输入i表示插入开始的位置,再输入k表示有k个插入数据,接着输入k个数据
第3行先输入i表示删除开始的位置,再输入k表示要删除k个数据
Output
顺序表内容包括顺序表的实际长度和数据,数据之间用空格隔开
第1行输出创建后的顺序表内容
第2行输出执行连续插入后的顺序表内容
第3行输出执行连续删除后的顺序表内容
Sample Input
Sample Output
1 #include <stdio.h> 2 int A[100]; 3 int n; 4 5 void print(){ 6 int i; 7 printf("%d ", n); 8 for(i=0;i<n;++i) 9 printf("%d ", A[i]); 10 printf("\n"); 11 } 12 13 14 void insert(){ 15 int i, num, pos; 16 scanf("%d %d", &pos, &num); 17 --pos; 18 for(i=n-1;i>=pos;--i){ 19 A[i+num] = A[i]; 20 } 21 22 for(i=0;i<num;++i) 23 scanf("%d", &A[i+pos]); 24 n+=num; 25 print(); 26 } 27 28 void delete(){ 29 int i, num, pos; 30 scanf("%d %d", &pos, &num); 31 --pos; 32 for(i=pos+num;i<n;++i){ 33 A[i-num] = A[i]; 34 } 35 n-=num; 36 print(); 37 } 38 39 int main(int argc, char const *argv[]) 40 { 41 int i; 42 scanf("%d", &n); 43 for(i=0;i<n;++i) 44 scanf("%d", &A[i]); 45 print(); 46 insert(); 47 delete(); 48 return 0; 49 }
Description
建立顺序表的类,属性包括:数组、实际长度、最大长度(设定为1000)
已知两个递增序列,把两个序列的数据合并到顺序表中,并使得顺序表的数据递增有序
Input
第1行先输入n表示有n个数据,接着输入n个数据,表示第1个序列,要求数据递增互不等
第2行先输入m表示有m个数据,接着输入m个数据,表示第2个序列,要求数据递增互不等
Output
顺序表内容包括顺序表的实际长度和数据,数据之间用空格隔开
第1行输出创建后的顺序表内容
Sample Input
Sample Output
#include <stdio.h> int A[50]; int B[50]; int C[100]; int main(int argc, char const *argv[]) { int i, n1, n2; scanf("%d", &n1); for(i=0;i<n1;++i) scanf("%d", &A[i]); scanf("%d", &n2); for(i=0;i<n2;++i) scanf("%d", &B[i]); int n3 = n1+n2; int j, k; j = k = 0; for(i=0;i<n3;++i){ if(A[j] < B[k] && j < n1){ C[i] = A[j]; ++j; } else if(A[j] >= B[k] && k < n2){ C[i] = B[k]; ++k; } else if(j>=n1){ C[i] = B[k]; ++k; } else if(k>=n2){ C[i] = A[j]; ++j; } } printf("%d ", n3); for(i=0;i<n3;++i) printf("%d ", C[i]); printf("\n"); return 0; }