用C语言实现顺序表的无重复顺序输出

前序:好久没有用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");
    	}
       
    }

喜欢的记得点赞关注我哦!

在这里插入图片描述

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tronhon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值