删除重复数据(将先出现的数据与后面的数据对比,如果有重复的将后面的数据删除)
提示:可以直接使用按位置删除的函数。两层循环
顺序表中原有: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;
}