2024.7.31数据结构作业

删除重复数据(将先出现的数据与后面的数据对比,如果有重复的将后面的数据删除)

提示:可以直接使用按位置删除的函数。两层循环

顺序表中原有:1 2 2 1 1 3 4 3 2 4 5 3 4 5 4 1

1 2 2 1 3 4 3 2 4 5 3 4 5 4 1

......

顺序表中存储:1 2 3 4 5

提示:先找到重复数据的,按位置删除。

将白天课上的代码完成

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

#define N 10

typedef struct
{
    int data[N];
    int pos;
}list;

/******************
 * @brief 创建链表
 * @return 链表
*/
list* create_list(void)
{
    list* dlist = (list*)malloc(sizeof(list));
    if (dlist == NULL)   
    {
        printf("malloc failed\n");
        return NULL;
    }
    
    dlist->pos = 0;
    printf("create list success\n");
    return dlist;
}
/****************
 * @brief 插入链表中的数据
 * @param dlist 链表
 * @param num   要插入的数据
 * @return      无
*/
void insert_list(list* dlist,int num)
{
    //判断是否已经满了
    if(dlist->pos==N)
    {
        printf("List is full\n");
        return;
    }
    //插入数据
    dlist->data[dlist->pos]=num;
    //更新位置
    dlist->pos++;
    printf("insert num:%d success\n",num);
}
/*************************
 * @brief 插入链表中的数据
 * @param dlist 链表
 * @param num   要插入的数据
 * @param pos   要插入的位置,[0,list->pos]
 * @return      无
*/
void insert_data(list* dlist,int num,int pos)
{
    if(dlist->pos==N)
    {
        printf("List is full\n");
        return;
    }
    if(pos<0 || pos>dlist->pos)
    {
        printf("pos is out of range\n");
        return;
    }
    //插入数据
    for(int i=dlist->pos-1;i>=pos;i--)
    {
        dlist->data[i+1]=dlist->data[i];
    }
    dlist->data[pos]=num;
    dlist->pos++;
    printf("insert num:%d success\n",num);
}

/****************
 * @brief 更新链表中的数据
 * @param dlist 链表
 * @param num   要插入的数据
 * @param pos   要插入的位置,[0,list->pos]
 * @return      无
*/
void update_list(list* dlist,int num,int pos)
{
    int old_num=dlist->data[pos];
    //判断是否越界
    if(pos<0 || pos>=dlist->pos)
    {
        printf("pos is out of range\n");
        return;
    }
    //更新数据
    dlist->data[pos]=num;
    printf("update %d to %d success\n",old_num,num);
}

/****************************
 * @brief 删除链表中的数据
 * @param dlist 链表
 * @param num   要删除的数据
 * @return      无
****************************/
void delate_data(list* dlist,int num)
{
    int i;
    if(dlist->pos==0)
    {
        printf("List is empty\n");
        return;
    }
    if(dlist->pos<0 || dlist->pos>=N)
    {
        printf("pos is out of range\n");
        return;
    }
    for(i=0;i<dlist->pos;i++)    
    {
        if(dlist->data[i]==num)
        {
            //删除数据
            for(int j=i;j<dlist->pos-1;j++)
            {
                //数据移位
                dlist->data[j]=dlist->data[j+1];
            }
            dlist->pos--;
            printf("delete num:%d success\n",num);
            return;
        }
    }
    printf("data not found\n");
}
/****************
 * @brief 显示链表中的数据
 * @param dlist 链表
 * @return      无
*/
void show_list(list* dlist)
{
    int i;
    for(i=0;i<dlist->pos;i++)
    {
        printf("%d\n",dlist->data[i]);
    }
}
/***********
 * @brief 删除链表
 * @param dlist 链表
 * @return      无
 */
void delete_list(list* dlist)
{
    free(dlist);
    printf("delete list success\n");
}

int main(int argc,const char *argv[])
{
    list* list1=create_list();
    if(list1==NULL)
    {
        return 1;
    }
    insert_list(list1,1);
    insert_list(list1,2);
    insert_list(list1,3);
    insert_list(list1,4);
    delate_data(list1,3);//删除数据3
    update_list(list1,5,1);//更新数据data[1]为5
    show_list(list1);

    delete_list(list1);//释放内存
    return 0;
}

 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值