数据结构——线性表的顺序表示(1)

题目来源于王道2018数据结构考研复习指导线性表的综合练习

编译环境:VS2015

题目:从顺序表中删除具有最小值的元素(假设唯一),并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。

具体实现如下:

#include<stdio.h>
#include<stdlib.h>
#define initSize 50//定义线性表的初始长度
typedef int ElementType;

typedef struct {
    ElementType *data;//顺序表的元素
    int length;//当前表的长度
    int maxSize;//最大容量
}SeqList;//顺序表的类型定义

//初始化表。构造一个空的线性表
void InitList(SeqList &L) {
    L.data = (ElementType*)malloc(sizeof(ElementType)*initSize);//分配存储空间
    L.length = 0;//设置顺序表的长度为0
    L.maxSize = initSize;//设置顺序表的最大容量
}

//创建线性表
void CreateList(SeqList &L,int n) {
    for (int i = 0;i < n;i++) {
        scanf_s("%d",&(L.data[i]));
        L.length = n;
    }
}

//删除最小值
int RemoveMin(SeqList &L,int &value) {
    int pos = 0;//记录最小值点的位置
    if (L.length == 0)
        return 0;
    value = L.data[0];
    for (int i = 1;i < L.length;i++) {
        if (L.data[i] < value) {
            value = L.data[i];
            pos = i;
        }
    }
    L.data[pos] = L.data[L.length - 1];
    L.length--;
    return 1;
}

//显示列表
void ShowList(SeqList L) {
    for (int i = 0;i < L.length;i++) {
        printf_s("%-3d",L.data[i]);
    }
}

int main() {
    int length,min;
    SeqList L;
    InitList(L);
    printf_s("输入表的长度:");
    scanf_s("%d",&length);
    printf_s("
输入初始值:");
    CreateList(L,length);
    printf_s("
初始的顺序表的元素如下:");
    ShowList(L);
    RemoveMin(L,min);
    printf_s("
删除最小值后的顺序表的元素如下:");
    ShowList(L);
    system("pause");
    return 0;
}

测试结果截图:

原文地址:https://www.cnblogs.com/abyss1114/p/7282806.html