删除重复数据(将先出现的数据与后面的数据对比,如果有重复的将后面的数据删除)
提示:可以直接使用按位置删除的函数 顺序表中原有:1 2 2 1 1 3 4 3 2 4 5 3 4 5 4 1
......
顺序表中存储:1 2 3 4 5
#include "gsj.h"
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int length;
} SeqList;
void removeDuplicates(SeqList *list) {
for (int i = 0; i < list->length - 1; ++i) {
for (int j = i + 1; j < list->length;) {
if (list->data[i] == list->data[j]) {
for (int k = j; k < list->length - 1; ++k) {
list->data[k] = list->data[k + 1];
}
list->length--;
} else {
j++;
}
}
}
}
void printList(SeqList *list) {
for (int i = 0; i < list->length; ++i) {
printf("%d ", list->data[i]);
}
printf("\n");
}
int main() {
SeqList myList = {{1, 2, 2, 1, 1, 3, 4, 3, 2, 4, 5, 3, 4, 5, 4, 1}, 16};
printf("初始数组: ");
printList(&myList);
removeDuplicates(&myList);
printf("重置过后: ");
printList(&myList);
return 0;
}
顺序存储全部功能实现代码如下:
函数功能实现
#include "gsj.h"
#include "03_Seq.h"
//创建顺序表
Seq* aet_seq()
{
// int data[N]={0};
// int pos=0;
//malloc申请一个堆空间
Seq *list =(Seq*)malloc(sizeof(Seq));
//内存置位
memset(list,0,sizeof(Seq));
return list;
}
//插入数据
void ert_stu(Seq *list,dataType msg)
{
if(list->pos >= N){
printf("满了\n");
// return -1;
}
list->data[list->pos]=msg;
list->pos++;
// return 0;
}
//遍历数据
void show_seqList(Seq* list){
for(int i=0;i<list->pos;i++){
printf("%d\n",list->data[i]);
}
// return;
}
//尾部删除
dataType delete_seq(Seq *list){
if(list->pos==0){
printf("顺序表为空,删除失败\n");
return (dataType)-1;
}
list->pos--;
dataType data=list->data[list->pos];
return data;
}
//向指定位置删除数据
void delete_ceq(Seq* list){
int a;
printf("输入下标\n");
scanf("%d",&a);
for(int i=a;i<=list->pos;i++){
list->data[i]=list->data[i+1];
}
list->pos--;
}
//向指定位置插入数据
void dalete_aeq(Seq* list,dataType msg){
if(index>list->pos || index<0){
printf("无法插入\n");
// return -1;
}
if(list->pos >= N){
printf("满了\n");
// return -1;
}
int index=0;
printf("输入要插入的位置\n");
scanf("%d",&index);
for(int i=list->pos;i>index;i--){
list->data[i]=list->data[i-1];
}
list->data[index]=msg;
list->pos++; //插入数据需要更新顺序表长度
}
//按下标位置进行修改
void dalete_cachoong(Seq *list,dataType msg){
int a;
printf("输入下标\n");
scanf("%d",&a);
if(a>=list->pos || a<0){
printf("a=%d下标位置非法,无法修改\n",a);
}
list->data[a]=msg;
}
//按下标位置对数据进行查询
dataType dalete_cach(Seq *list){
int a;
printf("输入下标\n");
scanf("%d",&a);
if(a>=list->pos || a<0){
printf("a=%d下标位置非法,无法修改\n",a);
return(dataType)-1;
}
return list->data[a];
}
主函数main引用功能函数
#include "gsj.h"
#include "03_Seq.h"
int main(){
//创建顺序表
Seq* list = aet_seq();
//插入数据
ert_stu(list,100);
ert_stu(list,104);
ert_stu(list,104);
ert_stu(list,105);
ert_stu(list,107);
show_seqList(list);
//尾部删除
dataType data;
data=delete_seq(list);
printf("%d\n",data);
//向指定位置删除数据
delete_ceq(list);
show_seqList(list);
//向指定位置插入数据
dalete_aeq(list,66);
show_seqList(list);
//按下标位置进行修改
dalete_cachoong(list,100);
//按下标位置对数据进行查询
dalete_cach(list);
return 0;
}
宏定义,函数声明 包头文件
#ifndef __SEQ__
#define __SEQ__
#define N 10
typedef int dataType;
typedef struct{
dataType data[N];
int pos;
}Seq;
Seq* aet_seq();
void ert_stu(Seq *list,dataType msg);
void show_seqList(Seq* list);
dataType delete_seq(Seq *list);
void delete_ceq(Seq* list);
void dalete_aeq(Seq* list,dataType msg);
void dalete_cachoong(Seq *list,dataType msg);
dataType dalete_cach(Seq *list);
#endif