天勤论坛高分笔记 2016 版,第 27 页,例 2-2。
描述:删除顺序表L中下标为p(1<=p<=length)的元素,成功返回1,否则返回0,并将被删除元素的值赋给e。

c/*
Page 27, Example 2-2.
描述:删除顺序表L中下标为p(1<=p<=length)的元素,成功返回1,否则返回0,并将被删除元素的值赋给e。
*/

#include "stdio.h"
#define MAXSIZE 50

typedef struct 
{
    int data[MAXSIZE];
    int length;
}Sqlist;

void init(Sqlist &sl)
{
    int len = 10;

    for(int i=1; i<=len; ++i)
    {
        sl.data[i] = i*3-2;
    }
    sl.length = len;
}

int delSqlist(Sqlist &sl, int index, int &e)
{
    int len=sl.length;
    int loc;

    if(index<1 || index>len)
    {
        return 0;
    }

    loc=index;
    e=sl.data[index];   //返回被删除的值应在“删除”(后续元素前移)前进行
    while(loc<len)
    {
        sl.data[loc]=sl.data[loc+1];
        loc++;  // 这步不能遗漏
    }
    sl.length=len-1;

    return 1;
}

void printSqlist(Sqlist sl)
{
    int len=sl.length;
    for(int i=1; i<=len; i++){
        printf("%d,", sl.data[i]);
    }
    printf(";Length: %d\n", sl.length);
}

int main()
{
    int index;
    int e;
    Sqlist sl;

    init(sl);
    printf("Index: ");
    scanf("%d", &index);

    printSqlist(sl);

    if(delSqlist(sl, index, e) == 1)
    {
        printf("Deleted finish! Deleted value is %d. \n", e);
    }
    else
    {
        printf("Deleted failed. \n");
    }

    printSqlist(sl);

    return 0;
}

土卜皿
341 声望8 粉丝

栽花种树,潜水跑酷。