前序:好久没有用C语言了,就是嫌弃C语言几乎所有的底层方法都要自己编码实现,对于业务逻辑的处理就不能更好的把控。但但是C语言确实对于提升编码能力是很有益的。今天应别人的要求,简单实现了一下,C的原生感很强,比java更能体现一个人的算法功底。
简单讲一下步骤:
(1)输入表长度
(2)初始化线性表
(3)将顺序表排序(排序方法自选:什么冒泡排序,直接选择排序,快序排序均可以…)
(4)删除重复元素(这个实现起来比较简单,比较过程只用O(n)时间,重构顺序表)
(5)直接output(注意输出格式即可)
附上源代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct SqList{
int* data;
int length;
};
bool InitList(struct SqList* L,int n)// 初始化list
{
L->data=(int*)malloc(sizeof(int)*(n));
int data=0;
for(int i=0;i<n;i++)
{
scanf("%d",&data);
L->data[i]=data;
}
L->length= n;
return true;
}
void bubblesort(struct SqList* L)//冒泡排序算法
{
int data;
int t;
for(int i=1;i<L->length;i++)
{
for(int j=0;j<L->length-1;j++)
{
if(L->data[j]>L->data[j+1])
{
t=L->data[j+1];
L->data[j+1]=L->data[j];
L->data[j]=t;
}
}
}
}
void Delete_same(struct SqList* LL)//删除重复元素
{
int i=0;
int j=1;
for(i=0,j=1;j<LL->length;j++)
{
if(LL->data[j]!=LL->data[i])
{
i++;
LL->data[i]=LL->data[j];
}
}
LL->length=i+1;
}
void output(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;
int n;
scanf("%d",&n); //输入表长
if(InitList(&L,n)==true)
{
bubblesort(&L);
Delete_same(&L);
output(&L);
printf("\n\n");
//printf("顺序表初始化成功!\n");
}else{
printf("顺序表初始化失败!\n");
}
}