关于数据结构和算法:PIPIOJ1213-顺序表的删除

4次阅读

共计 1262 个字符,预计需要花费 4 分钟才能阅读完成。

题目链接

戳我

题目形容

从程序表 L 中删除具备最小值的元素 (假如惟一) 并友函数返回被删元素的值。空出的元素由最初一个元素填补。

输出

输出蕴含一个整数 n 代表程序表 L 长度。
接下来蕴含 n 个整数,代表程序表 L 中的元素。

输入

若程序表为空,输入 “error”.
若不为空,输入最小元素的值并输入删除最小值之后的程序表。

样例输出

3
1 2 3

样例输入

1
3 2

留神点

这里要留神审题,删除最小元素,并把最初一个元素放到删除元素的地位上,
并不需要删除元素后,挪动后续元素。

C++ 参考解答

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXSIZE 50
typedef int ElemType;

typedef struct {ElemType data[MAXSIZE];
    int length;
}SqList;

// 初始化程序表
void InitList(SqList& L) {
    L.length =0;
    memset(L.data, 0, sizeof(ElemType));
}

// 打印程序表
void PrintList(SqList L) {
    int i;
    for (i = 0; i < L.length; i++) {printf("%d", L.data[i]);
    }
    printf("\n");
}

// 删除程序表元素
bool ListDelete(SqList& L, int i) {if (i<0 || i>L.length) {return false;}
    if (L.length == 0) {return false;}
    // 不须要挪动元素
    //int j;
    /*for(j=i;j<L.length-2;j++){L.data[j] = L.data[j+1];
    }*/
    L.data[i - 1] = L.data[L.length - 1];
    L.length--;
    return true;
}

// 求程序表中最小的元素
ElemType ListMin(SqList L) {int x = L.data[0]; int i;
    for (i = 1; i < L.length; i++) {if (L.data[i] < x) {x = L.data[i];
        }
    }
    return x;
}

// 求出程序表中最小元素的地位
int MinPos(SqList L,int x) {
    int i;
    for (i = 0; i < L.length; i++) {if (L.data[i] == x) {return i + 1;}
    }
}

int main() {
    SqList L;int i,n;
    ElemType x,min;
    InitList(L);
    scanf("%d", &n);
    L.length = n;
    for (i = 0; i < L.length; i++) {scanf("%d", &L.data[i]);
    }
    min = ListMin(L);
    ListDelete(L, MinPos(L,min));
    if (L.length == 0) {printf("error\n");
    }else {printf("%d\n", min);
        PrintList(L);
    }
    return 0;
}
正文完
 0