鱼C论坛

 找回密码
 立即注册
查看: 3158|回复: 2

动态顺序表总报错

[复制链接]
发表于 2012-8-22 11:23:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. //动态创建一长度为10的顺序表,向表中输入15个整数,并删除第五个元素
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #define Max 10
  5. typedef struct {
  6. int *elem;
  7. int len;
  8. int listsize;
  9. }Sqlist;void initSqlist(Sqlist *l) {
  10. l->elem = (int *)malloc(Max*sizeof(int));
  11. if(!(l->elem)) {
  12.   printf("动态创建顺序表失败!\n");
  13.   exit(0);
  14. }
  15. l->len = 0;
  16. l->listsize = Max;
  17. // printf("success!\n");
  18. }void InsertSqlist(Sqlist *l, int n, int e) {
  19. int i;
  20. int *base, *des, *sor;
  21. if(n<1 || n>l->len+1) {
  22.   printf("非法插入!");
  23.   return;
  24. }
  25. if(l->len >= l->listsize) {
  26.   base = (int *)realloc(l->elem,l->listsize+10*sizeof(int));
  27.   if(!base) {
  28.    printf("插入失败!\n");
  29.    exit(0);
  30.   }
  31.   l->elem = base;
  32.   l->listsize=l->listsize+10;
  33.   printf("success!\n%d\n",l->listsize);
  34. }
  35. //  printf("success!\n%d\n",l->listsize);
  36. des = &(l->elem[i-1]);
  37. //  printf("success!\n%d\n",l->listsize); for(/*l->len==0?(sor=&(l->elem[0])):(sor=&(l->elem[l->len-1]))*/sor=&(l->elem[l->len-1]); /*printf("success1!\n")*/sor>=des; sor--) {
  38. //  printf("success!\n");
  39.   if(l->len==0) { printf("success!\n");*des=e;}
  40.   else
  41.    *(sor+1) = *sor;
  42. }
  43. *des = e;
  44. l->len++;
  45. }void DelSqlist(Sqlist *l, int n) {
  46. int i;
  47. if(n<1 || n>l->len+1) {
  48.   printf("非法删除!\n");
  49.   return;
  50. }
  51. for(; n<l->len; n++) {
  52.   l->elem[n-1] = l->elem[n];
  53. }
  54. l->len--;
  55. }main() {
  56. Sqlist l;
  57. int i;
  58. initSqlist(&l);
  59. for(i=0; i<15; i++) {
  60.   InsertSqlist(&l,i+1,i+1);
  61. }
  62. for(i=0; i<l.len; i++) {
  63.   printf("%d ",l.elem[i]);
  64. }
  65. printf("\n表大小:%d\n",l.listsize); printf("删除第五个元素:\n");
  66. DelSqlist(&l,5);
  67. for(i=0; i<l.len; i++) {
  68.   printf("%d ",l.elem[i]);
  69. }
  70. printf("\n\n");
  71. }
复制代码
//动态创建一长度为10的顺序表,向表中输入15个整数,并删除第五个元素
运行总出错,我挑不出来了,来求助

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-8-22 21:56:55 | 显示全部楼层
37行 究竟是全部都注释? 还是只注释了一部分?
我看到前面有 // , 应该是全部注释,
但是, 如果全部注释了,
那么 43~45行 :
  1. *des = e;
  2. l->len++;
  3. }
复制代码
就多出了一个"}"了
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-8-23 10:03:08 | 显示全部楼层
  1. //                printf("success!\n%d\n",l->listsize);

  2.         for(/*l->len==0?(sor=&(l->elem[0])):(sor=&(l->elem[l->len-1]))*/sor=&(l->elem[l->len-1]); /*printf("success1!\n")*/sor>=des; sor--) {
  3. /*                printf("success!\n");*/
  4.                 if(l->len==0) {        printf("success!\n");*des=e;}
  5.                 else
  6.                         *(sor+1) = *sor;
  7.         }
复制代码
肯定不是全部注释,我没注意贴上来变成这样了,改一下。可以编译通过的,运行出错
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-14 19:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表