当前位置: 代码迷 >> 综合 >> 从有序顺序表中删除所有值值重复的元素,使表中所有元素均不同
  详细解决方案

从有序顺序表中删除所有值值重复的元素,使表中所有元素均不同

热度:11   发布时间:2024-02-25 12:19:39.0

代码示例

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define ListSize 10typedef struct SqList {int* data;int length;
};
// ---------------------------- 初始化-----------------------------
bool InitList(struct SqList* L)
{L->data = (int*)malloc(sizeof(int) * ListSize);int i = 0;for (i = 0; i < ListSize; i++){L->data[i] = i;}//-----------------这里制造三个相等的元素------------L->data[4] = 4;L->data[5] = 4;L->data[6] = 4;L->length = ListSize;return true;
}bool Delete_same(struct SqList* L)
{if (L->length == 0) {return false;}int i;int j;for (i = 0, j = 1; j < L->length; j++){if (L->data[i] != L->data[j])//查找下一个与上个元素值不同的元素{L->data[++i] = L->data[j];//找到后,将元素前移,注意!这里必须是++i,而不能是i++,否则会丢失数据}}L->length = i + 1;return true;
}void print(struct SqList* L)
{int j = L->length;int i = 0;for (i = 0; i < j; i++){printf("%d ", L->data[i]);}printf("\n");
}
int main()
{//-------------------初始化顺序表--------------------struct SqList L;if (InitList(&L) == true) {printf("顺序表初始化成功!\n");}print(&L);printf("\n\n");printf("删除相同元素后\n\n");Delete_same(&L);print(&L);printf("\n\n");}

 

  相关解决方案