鱼C论坛

 找回密码
 立即注册
查看: 1042|回复: 12

[已解决]得不到想要的结果

[复制链接]
发表于 2021-10-22 19:53:46 | 显示全部楼层 |阅读模式

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

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

x
数据结构的题目


  1. #include<stdio.h>
  2. #include<malloc.h>
  3. #define MAXLEN 100
  4. typedef char DataType;

  5. typedef struct
  6. {
  7.         DataType data[MAXLEN];
  8.         int Length;
  9. }SeqList;


  10. void CreatSeqList(SeqList *L,DataType a[],int n)
  11. {
  12.         int i;
  13.         L=(SeqList *)malloc(sizeof(SeqList));
  14.         for(i=0;i<n;i++)
  15.                 L->data[i]=a[i];
  16.                 L->Length=n;
  17. }

  18. void InitList(SeqList *L)
  19. {
  20.         L=(SeqList *)malloc(sizeof(SeqList));
  21.         L->Length = 0;
  22. }

  23. void destroyList(SeqList *L)
  24. {
  25.         free(L);
  26. }



  27. //位置查找
  28. int GetElem(SeqList *L,int i,DataType *x)
  29. {
  30.         if(i<1||i>L->Length)
  31.                 return 0;
  32.         else
  33.         {
  34.                 *x=L->data[i-1];
  35.                 return 1;
  36.         }
  37. }


  38. //按值查找
  39. int Locate(SeqList *L,DataType x)
  40. {
  41.         int i=0;
  42.         while(i<L->Length && L->data[i]!=x)
  43.                 i++;
  44.         if(i>=L->Length)
  45.                 return 0;
  46.         else
  47.                 return i+1;
  48. }


  49. //插入
  50. int InsElem(SeqList *L,int i,DataType x)
  51. {
  52.         int j;
  53.         if(L->Length>=MAXLEN)
  54.         {
  55.                 printf("顺序表已满!");
  56.                 return -1;
  57.         }
  58.         if(i<1||i>=L->Length+1)
  59.         {
  60.                 printf("插入位置出错!");
  61.                 return 0;
  62.         }
  63.         if(i==L->Length+1)
  64.         {
  65.                 L->data[i-1]=x;
  66.                 L->Length++;
  67.                 return 1;
  68.         }
  69.         for(j=L->Length-1;j>=i-1;j--)
  70.         {
  71.                 L->data[j+1]=L->data[j];
  72.                 L->data[i-1]=x;
  73.                 L->Length++;
  74.                 return 1;
  75.         }
  76. }


  77. //删除
  78. int DelElem(SeqList *L,int i,DataType *x)
  79. {
  80.         int j;
  81.         if(L->Length>=0)
  82.         {
  83.                 printf("顺序表为空!");
  84.                 return -1;
  85.         }
  86.         if(i<1||i>=L->Length+1)
  87.         {
  88.                 printf("不存在第i个元素!");
  89.                 return 0;
  90.         }
  91.         *x=L->data[i-1];
  92.         for(j=i;j<L->Length;j++)
  93.         {
  94.                 L->data[j-1]=L->data[j];
  95.                 L->Length--;
  96.                 return 1;
  97.         }
  98. }


  99. //输出
  100. void DispList(SeqList *L)
  101. {
  102.         int i;
  103.         for(i=0;i<L->Length;i++)
  104.         {
  105.                 printf("%5c",L->data[i]);
  106.         }
  107. }

  108. int getLength(SeqList *L)
  109. {
  110.         return(L->Length);
  111. }



  112. void main()
  113. {

  114. SeqList *L;
  115. char a[5]={0};
  116. DataType x;
  117. printf("顺序表的基本运算如下:\n");
  118. printf("初始化顺序表L\n");
  119. InitList(L);
  120. CreatSeqList(L,a,6);
  121. printf("依次插入a,b,c,d,e元素\n");
  122. InsElem(L,1,'a');
  123. InsElem(L,2,'b');
  124. InsElem(L,3,'c');
  125. InsElem(L,4,'d');
  126. InsElem(L,5,'e');
  127. printf("输出顺序表L:");
  128. DispList(L);
  129. printf("输出顺序表L的长度:%d\n",getLength(L));
  130. GetElem(L,3,&x);
  131. printf("顺序表L的第3个元素:%c\n",x);
  132. printf("元素a的位置:%d\n",Locate(L,'a')) ;
  133. InsElem(L,4,'f');
  134. DispList(L);
  135. DelElem(L,3,&x);
  136. DispList(L);
  137. destroyList(L);

  138. }
复制代码
最佳答案
2021-10-22 22:19:08
  1. #include<stdio.h>
  2. #include<malloc.h>
  3. #define MAXLEN 100
  4. typedef char DataType;

  5. typedef struct
  6. {
  7.         DataType data[MAXLEN];
  8.         int Length;
  9. }SeqList;


  10. void CreatSeqList(SeqList ** L,DataType a[],int n)
  11. {
  12.         int i;
  13.         *L=(SeqList *)malloc(sizeof(SeqList));
  14.         for(i=0;i<n;i++)
  15.                 (*L)->data[i]=a[i];
  16.                 (*L)->Length=n;
  17. }

  18. void InitList(SeqList **L)
  19. {
  20.         int cs=sizeof(SeqList);
  21.         *L=(SeqList *)malloc(cs);
  22.         (*L)->Length = 0;
  23. }

  24. void destroyList(SeqList **L)
  25. {
  26.         free(*L);
  27. }



  28. //位置查找
  29. int GetElem(SeqList **L,int i,DataType *x)
  30. {
  31.         if(i<1||i>(*L)->Length)
  32.                 return 0;
  33.         else
  34.         {
  35.                 *x=(*L)->data[i-1];
  36.                 return 1;
  37.         }
  38. }


  39. //按值查找
  40. int Locate(SeqList **L,DataType x)
  41. {
  42.         int i=0;
  43.         while(i<(*L)->Length && (*L)->data[i]!=x)
  44.                 i++;
  45.         if(i>=(*L)->Length)
  46.                 return 0;
  47.         else
  48.                 return i+1;
  49. }


  50. //插入
  51. int InsElem(SeqList**L,int i,DataType x)
  52. {
  53.         if((*L)->Length>=MAXLEN)
  54.         {
  55.                 printf("顺序表已满!");
  56.                 return -1;
  57.         }
  58.         if(i<1||i>=(*L)->Length+1)
  59.         {
  60.                 printf("插入位置出错!");
  61.                 return 0;
  62.         }
  63.         if(i==(*L)->Length)
  64.         {
  65.                 (*L)->data[i]=x;
  66.                 (*L)->Length++;
  67.                 return 1;
  68.         }
  69.                 DataType tmp=0;
  70.                 if (--i<(*L)->Length)
  71.                 {
  72.                         (*L)->Length++;

  73.                         for (int j = i+1; j <  (*L)->Length; j++)
  74.                         {
  75.                                 tmp=(*L)->data[j];
  76.                 (*L)->data[j]=(*L)->data[i];
  77.                                 (*L)->data[i]=tmp;
  78.                         }
  79.                         (*L)->data[i]=x;
  80.                 }
  81.             
  82.         
  83.                 return 1;
  84. }


  85. //删除
  86. int DelElem(SeqList **L,int i,DataType *x)
  87. {
  88.         int j;
  89.         if((*L)->Length==0)
  90.         {
  91.                 printf("顺序表为空!");
  92.                 return -1;
  93.         }
  94.         if(i<1||i>=(*L)->Length+1)
  95.         {
  96.                 printf("不存在第i个元素!");
  97.                 return 0;
  98.         }
  99.         *x=(*L)->data[i-1];
  100.         for(j=i;j<(*L)->Length;j++)
  101.         {
  102.                 (*L)->data[j-1]=(*L)->data[j];
  103.                
  104.                
  105.         }
  106.                
  107.                 (*L)->Length--;
  108.                 return 1;
  109. }


  110. //输出
  111. void DispList(SeqList **L)
  112. {
  113.         int i;
  114.         for(i=0;i<(*L)->Length;i++)
  115.         {
  116.                 printf("%5c",(*L)->data[i]);
  117.         }
  118. }

  119. int getLength(SeqList **L)
  120. {
  121.         return((*L)->Length);
  122. }



  123. void main()
  124. {

  125. SeqList *L=NULL;
  126. char a[5]={49,50,51,52,53};
  127. DataType x;
  128. printf("顺序表的基本运算如下:\n");
  129. printf("初始化顺序表L\n");
  130. //InitList(L);
  131. CreatSeqList(&L,a,5);
  132. printf("依次插入a,b,c,d,e元素\n");
  133. InsElem(&L,1,'a');
  134. InsElem(&L,2,'b');
  135. InsElem(&L,3,'c');
  136. InsElem(&L,4,'d');
  137. InsElem(&L,5,'e');
  138. printf("输出顺序表L:");
  139. DispList(&L);
  140. printf("输出顺序表L的长度:%d\n",getLength(&L));
  141. GetElem(&L,3,&x);
  142. printf("顺序表L的第3个元素:%c\n",x);
  143. printf("元素a的位置:%d\n",Locate(&L,'a')) ;
  144. InsElem(&L,4,'f');
  145. DispList(&L);
  146. DelElem(&L,3,&x);
  147. DispList(&L);
  148. destroyList(&L);
  149. getchar();
  150. }
复制代码

这是要求

这是要求
dd18b3c780589ada60173039829867f.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-22 20:43:14 | 显示全部楼层
到处都是毛病,可以重写了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-22 21:30:10 | 显示全部楼层
本帖最后由 jhq999 于 2021-10-22 21:32 编辑

  1. #include<stdio.h>
  2. #include<malloc.h>
  3. #define MAXLEN 100
  4. typedef char DataType;

  5. typedef struct
  6. {
  7.         DataType data[MAXLEN];
  8.         int Length;
  9. }SeqList;


  10. void CreatSeqList(SeqList * & L,DataType a[],int n)
  11. {
  12.         int i;
  13.         L=(SeqList *)malloc(sizeof(SeqList));
  14.         for(i=0;i<n;i++)
  15.                 L->data[i]=a[i];
  16.                 L->Length=n;
  17. }

  18. void InitList(SeqList * &L)
  19. {
  20.         int cs=sizeof(SeqList);
  21.         L=(SeqList *)malloc(cs);
  22.         L->Length = 0;
  23. }

  24. void destroyList(SeqList *L)
  25. {
  26.         free(L);
  27. }



  28. //位置查找
  29. int GetElem(SeqList * &L,int i,DataType *x)
  30. {
  31.         if(i<1||i>L->Length)
  32.                 return 0;
  33.         else
  34.         {
  35.                 *x=L->data[i-1];
  36.                 return 1;
  37.         }
  38. }


  39. //按值查找
  40. int Locate(SeqList * &L,DataType x)
  41. {
  42.         int i=0;
  43.         while(i<L->Length && L->data[i]!=x)
  44.                 i++;
  45.         if(i>=L->Length)
  46.                 return 0;
  47.         else
  48.                 return i+1;
  49. }


  50. //插入
  51. int InsElem(SeqList* & L,int i,DataType x)
  52. {
  53.         int j;
  54.         if(L->Length>=MAXLEN)
  55.         {
  56.                 printf("顺序表已满!");
  57.                 return -1;
  58.         }
  59.         if(i<1||i>=L->Length+1)
  60.         {
  61.                 printf("插入位置出错!");
  62.                 return 0;
  63.         }
  64.         if(i==L->Length)
  65.         {
  66.                 L->data[i]=x;
  67.                 L->Length++;
  68.                 return 1;
  69.         }
  70.                 DataType tmp=0;
  71.                 if (--i<L->Length)
  72.                 {
  73.                         L->Length++;

  74.                         for (int j = i+1; j <  L->Length; j++)
  75.                         {
  76.                                 tmp=L->data[j];
  77.                 L->data[j]=L->data[i];
  78.                                 L->data[i]=tmp;
  79.                         }
  80.                         L->data[i]=x;
  81.                 }
  82.             
  83.         
  84.                 return 1;
  85. }


  86. //删除
  87. int DelElem(SeqList * &L,int i,DataType *x)
  88. {
  89.         int j;
  90.         if(L->Length==0)
  91.         {
  92.                 printf("顺序表为空!");
  93.                 return -1;
  94.         }
  95.         if(i<1||i>=L->Length+1)
  96.         {
  97.                 printf("不存在第i个元素!");
  98.                 return 0;
  99.         }
  100.         *x=L->data[i-1];
  101.         for(j=i;j<L->Length;j++)
  102.         {
  103.                 L->data[j-1]=L->data[j];
  104.                
  105.                
  106.         }
  107.                
  108.                 L->Length--;
  109.                 return 1;
  110. }


  111. //输出
  112. void DispList(SeqList * &L)
  113. {
  114.         int i;
  115.         for(i=0;i<L->Length;i++)
  116.         {
  117.                 printf("%5c",L->data[i]);
  118.         }
  119. }

  120. int getLength(SeqList * &L)
  121. {
  122.         return(L->Length);
  123. }



  124. void main()
  125. {

  126. SeqList *L=NULL;
  127. char a[5]={49,50,51,52,53};
  128. DataType x;
  129. printf("顺序表的基本运算如下:\n");
  130. printf("初始化顺序表L\n");
  131. //InitList(L);
  132. CreatSeqList(L,a,5);
  133. printf("依次插入a,b,c,d,e元素\n");
  134. InsElem(L,1,'a');
  135. InsElem(L,2,'b');
  136. InsElem(L,3,'c');
  137. InsElem(L,4,'d');
  138. InsElem(L,5,'e');
  139. printf("输出顺序表L:");
  140. DispList(L);
  141. printf("输出顺序表L的长度:%d\n",getLength(L));
  142. GetElem(L,3,&x);
  143. printf("顺序表L的第3个元素:%c\n",x);
  144. printf("元素a的位置:%d\n",Locate(L,'a')) ;
  145. InsElem(L,4,'f');
  146. DispList(L);
  147. DelElem(L,3,&x);
  148. DispList(L);
  149. destroyList(L);
  150. return;
  151. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-22 21:58:18 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-22 22:04:54 | 显示全部楼层
本帖最后由 jhq999 于 2021-10-22 22:07 编辑


编译错误输出是什么?
无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-22 22:06:01 | 显示全部楼层
jhq999 发表于 2021-10-22 22:04
编译错误输出是什么?

[Error] expected ';', ',' or ')' before '&' token
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-22 22:11:57 | 显示全部楼层
c不支持引用,我再改改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-22 22:15:51 | 显示全部楼层
jhq999 发表于 2021-10-22 22:11
c不支持引用,我再改改

好的,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-22 22:19:08 | 显示全部楼层    本楼为最佳答案   
  1. #include<stdio.h>
  2. #include<malloc.h>
  3. #define MAXLEN 100
  4. typedef char DataType;

  5. typedef struct
  6. {
  7.         DataType data[MAXLEN];
  8.         int Length;
  9. }SeqList;


  10. void CreatSeqList(SeqList ** L,DataType a[],int n)
  11. {
  12.         int i;
  13.         *L=(SeqList *)malloc(sizeof(SeqList));
  14.         for(i=0;i<n;i++)
  15.                 (*L)->data[i]=a[i];
  16.                 (*L)->Length=n;
  17. }

  18. void InitList(SeqList **L)
  19. {
  20.         int cs=sizeof(SeqList);
  21.         *L=(SeqList *)malloc(cs);
  22.         (*L)->Length = 0;
  23. }

  24. void destroyList(SeqList **L)
  25. {
  26.         free(*L);
  27. }



  28. //位置查找
  29. int GetElem(SeqList **L,int i,DataType *x)
  30. {
  31.         if(i<1||i>(*L)->Length)
  32.                 return 0;
  33.         else
  34.         {
  35.                 *x=(*L)->data[i-1];
  36.                 return 1;
  37.         }
  38. }


  39. //按值查找
  40. int Locate(SeqList **L,DataType x)
  41. {
  42.         int i=0;
  43.         while(i<(*L)->Length && (*L)->data[i]!=x)
  44.                 i++;
  45.         if(i>=(*L)->Length)
  46.                 return 0;
  47.         else
  48.                 return i+1;
  49. }


  50. //插入
  51. int InsElem(SeqList**L,int i,DataType x)
  52. {
  53.         if((*L)->Length>=MAXLEN)
  54.         {
  55.                 printf("顺序表已满!");
  56.                 return -1;
  57.         }
  58.         if(i<1||i>=(*L)->Length+1)
  59.         {
  60.                 printf("插入位置出错!");
  61.                 return 0;
  62.         }
  63.         if(i==(*L)->Length)
  64.         {
  65.                 (*L)->data[i]=x;
  66.                 (*L)->Length++;
  67.                 return 1;
  68.         }
  69.                 DataType tmp=0;
  70.                 if (--i<(*L)->Length)
  71.                 {
  72.                         (*L)->Length++;

  73.                         for (int j = i+1; j <  (*L)->Length; j++)
  74.                         {
  75.                                 tmp=(*L)->data[j];
  76.                 (*L)->data[j]=(*L)->data[i];
  77.                                 (*L)->data[i]=tmp;
  78.                         }
  79.                         (*L)->data[i]=x;
  80.                 }
  81.             
  82.         
  83.                 return 1;
  84. }


  85. //删除
  86. int DelElem(SeqList **L,int i,DataType *x)
  87. {
  88.         int j;
  89.         if((*L)->Length==0)
  90.         {
  91.                 printf("顺序表为空!");
  92.                 return -1;
  93.         }
  94.         if(i<1||i>=(*L)->Length+1)
  95.         {
  96.                 printf("不存在第i个元素!");
  97.                 return 0;
  98.         }
  99.         *x=(*L)->data[i-1];
  100.         for(j=i;j<(*L)->Length;j++)
  101.         {
  102.                 (*L)->data[j-1]=(*L)->data[j];
  103.                
  104.                
  105.         }
  106.                
  107.                 (*L)->Length--;
  108.                 return 1;
  109. }


  110. //输出
  111. void DispList(SeqList **L)
  112. {
  113.         int i;
  114.         for(i=0;i<(*L)->Length;i++)
  115.         {
  116.                 printf("%5c",(*L)->data[i]);
  117.         }
  118. }

  119. int getLength(SeqList **L)
  120. {
  121.         return((*L)->Length);
  122. }



  123. void main()
  124. {

  125. SeqList *L=NULL;
  126. char a[5]={49,50,51,52,53};
  127. DataType x;
  128. printf("顺序表的基本运算如下:\n");
  129. printf("初始化顺序表L\n");
  130. //InitList(L);
  131. CreatSeqList(&L,a,5);
  132. printf("依次插入a,b,c,d,e元素\n");
  133. InsElem(&L,1,'a');
  134. InsElem(&L,2,'b');
  135. InsElem(&L,3,'c');
  136. InsElem(&L,4,'d');
  137. InsElem(&L,5,'e');
  138. printf("输出顺序表L:");
  139. DispList(&L);
  140. printf("输出顺序表L的长度:%d\n",getLength(&L));
  141. GetElem(&L,3,&x);
  142. printf("顺序表L的第3个元素:%c\n",x);
  143. printf("元素a的位置:%d\n",Locate(&L,'a')) ;
  144. InsElem(&L,4,'f');
  145. DispList(&L);
  146. DelElem(&L,3,&x);
  147. DispList(&L);
  148. destroyList(&L);
  149. getchar();
  150. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-22 22:31:51 | 显示全部楼层

为什么要用指向指针的指针?我开始写的代码算法是书上的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-22 22:45:01 | 显示全部楼层
因为形参和实参的问题,指针也是实参变量,如果直接代入,它不会随着形参改变而改变。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-22 22:51:04 | 显示全部楼层
jhq999 发表于 2021-10-22 22:45
因为形参和实参的问题,指针也是实参变量,如果直接代入,它不会随着形参改变而改变。

明白了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-22 22:52:25 | 显示全部楼层
最强废铁h 发表于 2021-10-22 22:31
为什么要用指向指针的指针?我开始写的代码算法是书上的

我才发现我改多了,关于形参实参只改
  1. void CreatSeqList(SeqList ** L,DataType a[],int n)
复制代码
就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-26 12:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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