zoukankan      html  css  js  c++  java
  • 数据结构总结:(一)顺序表

    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("
    ");
    10 }
    11 
    12 void insert(int pos, int value){
    13     int i;
    14     pos--;
    15     if(pos <0 || pos > n){printf("error
    "); 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
    "); 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
    "); return;}
    36     else printf("%d
    ", 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("
    ");
    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("
    ");
        return 0;
    }
  • 相关阅读:
    LeetCode Valid Sudoku
    接下来复习的重点
    leetcode:LRU Cache
    [leetcode] Insertion Sort List
    [QT Creator]LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 。
    [leetcode]Sort List
    李开复的七封信
    (归并排序)
    应聘面试自我介绍范文
    判断一颗二叉树是否是平衡二叉树
  • 原文地址:https://www.cnblogs.com/firstrate/p/3455592.html
Copyright © 2011-2022 走看看