当前位置:   article > 正文

顺序表的删除

顺序表的删除

说完了插入再来删除,所谓删除就是将表中的第i个元素删去使得长度为n的线性表变为长度为n-1的线性表

例:删除顺序表(1,2,3,4,5)中的第3个元素,需要将第四到第五个元素往前移一个位置具体操作如下图所示

先是移动前的顺序表

 然后移动4和5,4会将3覆盖也就达到了想要的删除效果

 因为移动后原来5的位置会空出来一位,我们要将长度减1,也就是last要减少1

 了解了思路,现在我们就可以来编写删除函数辣

  1. void dellist(seqlist *l,int land)
  2. {
  3. //先判断删除的位置是否合法
  4. if(land<1||land>l->last+1)
  5. {
  6. //这里的判断条件和插入的有一些不同,可以看见这里的last是加1的
  7. //插入的时候合法范围是1到last+2,这里last+2指的是要插入到原表的表尾下一个的位置数(注意是位置数而不是下标值)
  8. //删除的时候合法范围是 1到last+1,这里为什么不写加2,因为加2表示的是原表表尾下一个的位置数,但我们删除根本不会有这种操作
  9. //所以只需要到表尾就可以了
  10. printf("删除的位置有误\n");
  11. return;
  12. }
  13. for(int i=land-1;i<l->last;i++)
  14. {
  15. l->elem[i]=l->elem[i+1];
  16. }
  17. l->last--;
  18. }

主函数

  1. int main()
  2. {
  3. int j;
  4. seqlist *l;
  5. l=&n;
  6. int data;
  7. for(j=0;j<5;j++)
  8. {
  9. printf("输入第%d个初始数据:",j+1);
  10. scanf("%d",&data);
  11. l->elem[j]=data;
  12. }
  13. l->last=j-1;//这里的j-1就是顺序表里最后一个元素的下标值,注意是下标值
  14. int land;//land是用来代表删除第几个位置,注意land是第几个位置,不是下标值
  15. printf("输入你要删除的位置\n");
  16. scanf("%d",&land);
  17. dellist(l,land);
  18. printlist(l);
  19. }

整体代码

  1. #include <stdio.h>
  2. #define MAXSIZE 10
  3. struct seqlist
  4. {
  5. int elem[MAXSIZE];//这里我们拿整型数组来作示范
  6. int last;//last用来记录表中最后一个元素的下标值,注意是下标值,所以我们初始化的时候last从-1开始取
  7. }n;
  8. void dellist(seqlist *l,int land)
  9. {
  10. //先判断删除的位置是否合法
  11. if(land<1||land>l->last+1)
  12. {
  13. //这里的判断条件和插入的有一些不同,可以看见这里的last是加1的
  14. //插入的时候合法范围是1到last+2,这里last+2指的是要插入到原表的表尾下一个的位置数(注意是位置数而不是下标值)
  15. //删除的时候合法范围是 1到last+1,这里为什么不写加2,因为加2表示的是原表表尾下一个的位置数,但我们删除根本不会有这种操作
  16. //所以只需要到表尾就可以了
  17. printf("删除的位置有误\n");
  18. return;
  19. }
  20. for(int i=land-1;i<l->last;i++)
  21. {
  22. l->elem[i]=l->elem[i+1];
  23. }
  24. l->last--;
  25. }
  26. //此处为打印函数是用来检验的
  27. void printlist(seqlist *l)
  28. {
  29. for(int i=0;i<=l->last;i++)
  30. {
  31. printf("第%d个元素为%d\n",i+1,l->elem[i]);
  32. }
  33. }
  34. int main()
  35. {
  36. int j;
  37. seqlist *l;
  38. l=&n;
  39. int data;
  40. for(j=0;j<5;j++)
  41. {
  42. printf("输入第%d个初始数据:",j+1);
  43. scanf("%d",&data);
  44. l->elem[j]=data;
  45. }
  46. l->last=j-1;//这里的j-1就是顺序表里最后一个元素的下标值,注意是下标值
  47. int land;//land是用来代表删除第几个位置,注意land是第几个位置,不是下标值
  48. printf("输入你要删除的位置\n");
  49. scanf("%d",&land);
  50. dellist(l,land);
  51. printlist(l);
  52. }

进行运行测试

我们输入初始数据1,2,3,4,5

运行结果图为

 

然后我们输入要删除第几个位置的元素

输入删除第三个位置的元素

发现打印出删除后的结果为1,2,4,5是正确的

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/889420
推荐阅读
相关标签
  

闽ICP备14008679号