C语言实现顺序表删除多余元素并统计移动次数

题目:

        假设顺序表L中的元素按从小到大的次序排列,设计算法以删除表中重复的元素,用C写,
对顺序表(1,1,2,2,2,3,4,5,5,5,6,6,7,7,8,8,8,9)模拟执行本算法,并统计移动元素的次数:

代码:

#include <stdio.h>
#include <stdlib.h>
#define maxsize 100
#define elemtype int
typedef struct
{
    elemtype elem[maxsize];
    int length;
} Seqlist;
void InsList(Seqlist *L, int i, elemtype e)
{
    int k;
    if (i < 1 || i > L->length + 2)
    {
        printf("对不起,该位置不存在\n");
        return;
    }
    if (L->length == maxsize - 1)
    {
        printf("对不起,位置已满");
        return;
    }
    for (k = L->length; k >= i - 1; k--)
    {
        L->elem[k + 1] = L->elem[k];
    }
    L->elem[i - 1] = e;
    L->length++;
}

void DelList(Seqlist *L)
{
    int count = 0;
    for (int i = 0; i <= L->length; i++)
    {
        if (L->elem[i] != L->elem[count])
        {
            count++;
            L->elem[count] = L->elem[i];
        }
    }
    L->length = count;
    printf("移动元素的次数是:%d", count);
}

void view(Seqlist *L)
{
    printf("\n此顺序表为:\n");
    int i = 0;
    for (i = 0; i <= L->length; i++)
    {
        printf("%d ", L->elem[i]);
    }
    printf("\n");
}
int main()
{
    Seqlist L;
    L.length = -1;
    printf("请您输入--元素的总个数:\n");
    int j, m;
    scanf("%d", &m);
    printf("请您依次非递减的输入元素:\n");
    for (j = 1; j <= m; j++)
    {
        elemtype x;
        scanf("%d", &x);
        InsList(&L, j, x);
    }
    DelList(&L);
    view(&L);
    printf("\nHello world!\n");
}

效果图:

猜你喜欢

转载自blog.csdn.net/qq_42680327/article/details/129392067