题目:
假设顺序表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");
}
效果图:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)