数据结构总结:(一)顺序表

ps:  插入删除要小心,注意插入的位置pos。。。

白老师 OJ:

Input

第1行先输入n表示有n个数据,即n是实际长度;接着输入n个数据
第2行输入要插入的位置和新数据
第3行输入要插入的位置和新数据
第4行输入要删除的位置
第5行输入要删除的位置
第6行输入要查找的位置
第7行输入要查找的位置

Output

数据之间用空格隔开

第1行输出创建后的顺序表内容,包括顺序表实际长度和数据

每成功执行一次操作(插入或删除),输出执行后的顺序表内容

每成功执行一次查找,输出查找到的数据

如果执行操作失败(包括插入、删除、查找等失败),输出字符串error,不必输出顺序表内容

Sample Input

6 11 22 33 44 55 66
3 777
1 888
1
9
0
5

Sample Output

6 11 22 33 44 55 66
7 11 22 777 33 44 55 66
8 888 11 22 777 33 44 55 66
7 11 22 777 33 44 55 66
error
error
44

 

 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

6 11 22 33 44 55 66 2 3 99 88 77 4 5

Sample Output

6 11 22 33 44 55 66 9 11 99 88 77 22 33 44 55 66 4 11 99 88 66
 
 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

3 11 33 55 5 22 44 66 88 99

Sample Output

8 11 22 33 44 55 66 88 99

 

 

#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;
}

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值