今天想把之前的合并后的单链表中重复的元素删去,结果在一个函数中,竟然不可以直接调用delete函数,似乎是传值出现的问题,已经在主函数中将LC传值到delete_repeatnum,在delete_repeatnum中再传值到delete函数就不行了。

出现了如下错误:

最后只好采用笨办法,直接在delete_repeatnum函数中重复删除步骤,但还是小有遗憾,希望有大佬看到后可以提点一下,拜托拜托~

改正的方法如下:

void delete_repeatnum(SeqList *L)
{for(int i=0;i<L->size-1;i++)//该循环中,随着重复元素的删除,尺寸会改变 {if(L->list[i]==L->list[i+1]) //从左至右遍历,出现了重复 {for(int k=i;k<=L->size-1;k++)//再定义一个K,防止外部循环中i改变 {L->list[k-1]=L->list[k];//删除的本质就是左移 }L->size--;//尺寸减1 i--;   //如果不做这一步,出现3个以上重复元素会只删去一个 }}}

运行的结果是:

想了好久也没有直接调用函数的解决办法,下面是我的完整代码:

//尝试除掉单链表中重复的元素 #include<stdio.h>#define Max 100typedef int Datatype; typedef struct{
Datatype list[Max];
int size;
}SeqList; void define_initial(SeqList *L)
{L->size=0;
}int listlength(SeqList L)
{return L.size;
}void listinsert(SeqList *L,int i,Datatype x)//将x插入i位置
{if(L->size>=Max){printf("顺序表已满!");return ; } else if(i<0||i>L->size){printf("插入位置不合法!");return ; } else{for(int j=L->size;j>=i;j--){L->list[j+1]=L->list[j];}L->list[i]=x;L->size++;}
}void print_L(SeqList L)
{for(int k=0;k<L.size;k++){printf("%d ",L.list[k]);}
}void delete_number(SeqList *L,int i)//删除第i个元素
{if(i<=0||i>= L->size) {printf("删除出错!");return ; }else if(L->size<1) {printf("顺序表已空!");return ; }else{for(;i<=L->size-1;i++){L->list[i-1]=L->list[i];}L->size--;}
} void merge(SeqList LA,SeqList LB,SeqList *LC)
{if(LA.size==0) {print_L(LB);return;}else if(LB.size==0) {print_L(LA);return;}else{int x,y,z;x=0;y=0;z=0;while(x< LA.size&&y< LB.size){if(LA.list[x]<=LB.list[y]){LC->list[z]=LA.list[x];x++;z++;}else{LC->list[z]=LB.list[y];z++;y++;}}if(x==LA.size&&y<LB.size){while(y<=LB.size){LC->list[z]=LB.list[y];z++;y++;}}if(y==LB.size&&x<LA.size){while(x<LA.size){LC->list[z]=LA.list[x]; z++;x++; }}LC->size=z; }
}void delete_repeatnum(SeqList *L)
{for(int i=0;i<L->size-1;i++)//该循环中,随着重复元素的删除,尺寸会改变 {if(L->list[i]==L->list[i+1]) //从左至右遍历,出现了重复 {for(int k=i;k<=L->size-1;k++)//再定义一个K,防止外部循环中i改变 {L->list[k-1]=L->list[k];//删除的本质就是左移 }L->size--;//尺寸减1 i--;   //如果不做这一步,出现3个重复元素会只删去一个 }}}main(){//定义LASeqList LA;define_initial(&LA);for(int i=0;i<10;i++){listinsert(&LA,i,i*i);} printf("定义LA为顺序表:\n");print_L(LA);printf("LA的长度为%d\n",listlength(LA));int m=3;delete_number(&LA,m);printf("删除第m个元素后,顺序表为:\n");print_L(LA);printf("LA的长度为%d\n\n",listlength(LA));//定义LB SeqList LB;define_initial(&LB);for(int n=0;n<18;n++){listinsert(&LB,n,n*2);} printf("定义LB为顺序表:\n");print_L(LB);printf("LB的长度为%d\n",listlength(LB));int N=6;delete_number(&LB,N);printf("删除第N个元素后,顺序表为:\n");print_L(LB);printf("LB的长度为%d\n\n",listlength(LB));//合并LA、LBSeqList LC;define_initial(&LC);printf("合并后的顺序表为:\n");merge(LA,LB,&LC);if(LC.size>0) {print_L(LC);printf("\nLC的长度为%d\n",listlength(LC));}//补充一个删去重复元素的代码delete_repeatnum(&LC);printf("删除重复元素后,顺序表为:\n");print_L(LC);printf("长度为%d\n\n",listlength(LC));return 0;
}

C语言-顺序表直接删除重复元素相关推荐

  1. 顺序表中删除最小值元素

    2019.6.19 数据结构2.2.3 综合应用题(1) 题目: 从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值,空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行 ...

  2. c语言如何删除数组中的某一个元素_数据结构之线性表高效删除重复元素

    刚刚学完数据结构之线性表中关于顺序表和单链表的知识,我们知道顺序表中存储数据的结构是一个数组,对于数组来说,在尾部插入.删除元素是比较高效的,但是如果在中间或者开头插入.删除元素,就会涉及数据的搬移, ...

  3. c语言顺序表所需的头文件,数据结构【顺序表】

    1.线性表定义 线性表是一种线性结构.线性结构的特点是数据元素之间是一种线性关系,数据元素"一个接一个的排列".在一个线性表中数据元素的类型是相同的,或者说线性表是由同一类型的数据 ...

  4. 顺序表删除重复元素(完整代码的实现)

    [问题描述] 设一顺序表有若干元素,编写程序实现删除表中值重复的元素,即重复元素只保留一个. [输入形式] 第一行输入一个N(N不大于100),表示顺序表的长度: 第二行输入N个整数,表示顺序表元素: ...

  5. 顺序表元素的多种删除方式——删除重复元素和删除掉所有相同元素

    大家好,初来乍到请多关照~ 最近老师给留的编程作业里有一道题让我相当困惑:题目是这个样子的: 任务描述 本关任务: (1)使用将顺序表L中值为x的数据元素替换为y: (2)此处假设线性表中的元素用于表 ...

  6. c语言中去掉最小值,2020-07-12(C语言)从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。...

    //从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除元素的值.空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行. include include define MAXSI ...

  7. C语言-数据结构-可变长顺序表的删除操作

    [问题描述] 实现可变长顺序表的删除算法.任务要求:通过顺序表的初始化.插入算法,创建顺序表.根据删除需求,删除指定的顺序表元素. [输入形式] 第一行输入整数N(1<=N<=100),M ...

  8. C语言实现建立顺序表,修改顺序表,插入顺序表,删除顺序表

    #include <stdio.h> #include <stdlib.h>#define OK 1 #define ERROR 0 #define OVERFLOW -2 # ...

  9. 数据结构例1.已知顺序表L的长度为n,试编写算法实现在顺序表中删除值为elem的数据元素

    //已知顺序表L的长度为n,试编写算法实现在顺序表中删除值为elem的数据元素 //(其中n与elem从键盘输入) # include <iostream> # include <s ...

最新文章

  1. 记录一次提交开源JAR包到中央仓库的过程
  2. 【转载】ABAP中数据和对象的动态创建和调用
  3. Python解决数独
  4. linux apr文件解压失败,Apache编译安装提示configure: error: APR not found错误解决方法...
  5. 在外卖市场造一个拼多多
  6. 每日一题(易错):哪些REPEAT_INTERVAL参数能够实现每30分钟运行job
  7. 利用ajax防止session过期,AJAX实现防止Session过期
  8. Python编程语言中获取操作系统进程信息的方法
  9. vue项目中使用cn打印组件
  10. 全网最详细的ensp模拟器安装教程
  11. 网易云音乐实时数仓2.0进阶之路
  12. WPF 设置窗口不跟随触摸惯性拖动抖动
  13. access数据库修复
  14. code review流程规范。
  15. 关于浮动元素,你还在自己计算位置吗?来看看 Floating UI 吧
  16. 1024勋章 拿来吧你
  17. KingbaseFlySync replicator安装(Mysql-KES)
  18. 性能强悍的CSS动画库--Animate.css
  19. AccessibilityService的学习,抢红包实现
  20. NFT宝典:你需要知道NFT的术语和定义

热门文章

  1. js如何保留对象中指定字段(太刁了)
  2. 荐书|《DBT技巧训练手册》:宝贝,你就是你活着的原因
  3. ps国画效果案例制作教程和思路介绍
  4. PMP的一些概念与计算公式
  5. 80端口进不去问题解析
  6. 如何使用阿里云服务器快速搭建个人网站?
  7. 程序员崩溃了!稳拿的年终奖怎么说黄就黄?!
  8. 时钟抖动(Clock Jitter)和时钟偏斜(Clock Skew)
  9. 《清华园日记》读后感
  10. QQ,群,空间等API接口代码分享