鱼C论坛

 找回密码
 立即注册
查看: 1767|回复: 4

[已解决]求助怎么才能把结构体数组调到函数里?

[复制链接]
发表于 2019-2-12 11:49:23 | 显示全部楼层 |阅读模式

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

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

x
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. #define MAX 100

  4. struct staticLinkList{
  5.         int data;
  6.         int cur;
  7. }SLL[MAX];

  8. int init(struct staticLinkList);
  9. int Malloc_SLL(struct staticLinkList);
  10. int insert(struct staticLinkList,int n,int m);
  11. int del(struct staticLinkList,int n);
  12. int Free(struct staticLinkList,int k);

  13. int main(void){
  14.         int op,i,j;
  15.         printf("请选择需要的操作:\n");
  16.         printf("1 初始化静态链表\n2 插入元素\n 3删除元素\n4 退出\n");
  17.         scanf("%d,&op");
  18.         switch(op){
  19.                 case 1: init(SLL[MAX]);break;
  20.                 case 2: printf("请输入要插入的位置与数字:");scanf("%d%d",&i,&i);insert(SLL[MAX],i,j);break;
  21.                 case 3: printf("请输入要删除的元素的位置:");scanf("%d",&i);del(SLL[MAX],i);break;
  22.                 case 4: exit(1);
  23.         return 0;
  24. }

  25. int init(struct staticLinkList SLL){
  26.         int i;
  27.         for(i = 0;i < MAX - 1;i++){
  28.                 SLL[i].data = 0;
  29.                 SLL[i].cur = i + 1;
  30.         }
  31.         SLL[MAX - 1].cur = 0;
  32.         return 1;
  33. }
  34. int Malloc_SLL(struct staticLinkList SLL){
  35.         int f; // 接收备用链表的起始位置
  36.         f = SLL[0].cur;
  37.         if(SLL[0].cur ){
  38.                 SLL[0].cur = SLL[f].cur;       
  39.         }
  40.         return f;
  41. }
  42. int insert(struct staticLinkList SLL,int n,int m){
  43.         int f = Malloc_SLL(SLL);
  44.         SLL[f].data = n;
  45.         int s = MAX - 1,i;
  46.         for(i = 0;i < m - 1;i++){
  47.                 s = SLL[s].cur;
  48.         }
  49.         SLL[f].cur = SLL[s].cur;
  50.         SLL[s].cur = f;
  51.         return 1;
  52. }
  53. int del(struct staticLinkList SLL,int n){
  54.         int s = MAX - 1,i,k;
  55.         for(i = 0;i < n - 1;i++){
  56.                 s = SLL[s].cur;
  57.         }
  58.         k = SLL[s].cur
  59.         SLL[s].cur = SLL[k].cur;
  60.         Free(SLL,k);
  61.         return 1;
  62. }
  63. int Free(struct staticLinkList SLL,int k){
  64.         SLL[k].cur = SLL[0].cur;
  65.         SLL[0].cur = k;
  66.        
  67.         return 1;
  68. }
复制代码

[Error] subscripted value is neither array nor pointer nor vector
请问这个错误是怎么一回事?
最佳答案
2019-2-12 16:38:35
本帖最后由 jackz007 于 2019-2-12 16:57 编辑

        代码问题颇多,现在已经调通,功能细节问题楼主可以自行斟酌修改。

  1. #include  <stdio.h>
  2. #include  <stdlib.h>

  3. #define MAX 100

  4. struct staticLinkList{
  5.         int data ;
  6.         int cur  ;
  7. }SLL[MAX]        ;

  8. int init(struct staticLinkList SLL[]){
  9.         int i;
  10.         for(i = 0;i < MAX - 1;i++){
  11.                 SLL[i].data = 0;
  12.                 SLL[i].cur = i + 1;
  13.         }
  14.         SLL[MAX - 1].cur = 0;
  15.         return 1;
  16. }

  17. int Malloc_SLL(struct staticLinkList SLL[]){
  18.         int f                                         ; // 接收备用链表的起始位置
  19.         f = SLL[0] . cur                              ;
  20.         if(SLL[0] . cur ) SLL[0] . cur = SLL[f] . cur ;     
  21.         return f;
  22. }

  23. int insert(struct staticLinkList SLL[] , int n , int m){
  24.         int f = Malloc_SLL(SLL)                        ;
  25.         SLL[f] . data = n                              ;
  26.         int s = MAX - 1 , i                            ;
  27.         for(i = 0 ; i < m - 1 ; i ++) s = SLL[s] . cur ;
  28.         SLL[f] . cur = SLL[s] . cur                    ;
  29.         SLL[s] . cur = f                               ;
  30.         return 1                                       ;
  31. }

  32. int Free(struct staticLinkList SLL[] , int k){
  33.         SLL[k] . cur = SLL[0] . cur ;
  34.         SLL[0] . cur = k            ;
  35.         return 1                    ;
  36. }

  37. int del(struct staticLinkList SLL[] , int n){
  38.         int s = MAX - 1 , i , k                        ;
  39.         for(i = 0 ; i < n - 1 ; i ++) s = SLL[s] . cur ;
  40.         k = SLL[s] . cur                               ;
  41.         SLL[s] . cur = SLL[k] . cur                    ;
  42.         Free(SLL , k)                                  ;
  43.         return 1                                       ;
  44. }

  45. int main(void){
  46.         int op , i , j                                                                                                         ;
  47.         bool f                                                                                                                 ;
  48.         f = true                                                                                                               ;
  49.         while(f) {
  50.                 printf("请选择需要的操作:\n")                                                                                 ;
  51.                 printf("1 初始化静态链表\n2 插入元素\n3 删除元素\n4 显示\n5 退出\n")                                           ;
  52.                 scanf("%d" , & op)                                                                                             ;
  53.                 switch(op){
  54.                         case 1: init(SLL) ; break                                                                              ;
  55.                         case 2: printf("请输入要插入的位置与数字:") ; scanf("%d%d" , & i , & j) ; insert(SLL , i , j) ; break ;
  56.                         case 3: printf("请输入要删除的元素的位置:") ; scanf("%d" , & i) ; del(SLL , i) ; break                ;
  57.                         case 4: for(i = 0 ; i < MAX ; i ++) printf("%2d - %2d\n" , SLL[i] . data , SLL[i] . cur) ; break       ;
  58.                         case 5: f = false                                                                                      ;
  59.                 }
  60.         }
  61.         return 0                                                                                                               ;
  62. }
复制代码


        此外,建议楼主最好不要使用 Free() 这样的函数名,容易与系统函数混淆。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-2-12 12:27:53 | 显示全部楼层
形参中的SLL并不是你初始化的SLL
用指针形式来作为形参
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-12 16:38:35 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-2-12 16:57 编辑

        代码问题颇多,现在已经调通,功能细节问题楼主可以自行斟酌修改。

  1. #include  <stdio.h>
  2. #include  <stdlib.h>

  3. #define MAX 100

  4. struct staticLinkList{
  5.         int data ;
  6.         int cur  ;
  7. }SLL[MAX]        ;

  8. int init(struct staticLinkList SLL[]){
  9.         int i;
  10.         for(i = 0;i < MAX - 1;i++){
  11.                 SLL[i].data = 0;
  12.                 SLL[i].cur = i + 1;
  13.         }
  14.         SLL[MAX - 1].cur = 0;
  15.         return 1;
  16. }

  17. int Malloc_SLL(struct staticLinkList SLL[]){
  18.         int f                                         ; // 接收备用链表的起始位置
  19.         f = SLL[0] . cur                              ;
  20.         if(SLL[0] . cur ) SLL[0] . cur = SLL[f] . cur ;     
  21.         return f;
  22. }

  23. int insert(struct staticLinkList SLL[] , int n , int m){
  24.         int f = Malloc_SLL(SLL)                        ;
  25.         SLL[f] . data = n                              ;
  26.         int s = MAX - 1 , i                            ;
  27.         for(i = 0 ; i < m - 1 ; i ++) s = SLL[s] . cur ;
  28.         SLL[f] . cur = SLL[s] . cur                    ;
  29.         SLL[s] . cur = f                               ;
  30.         return 1                                       ;
  31. }

  32. int Free(struct staticLinkList SLL[] , int k){
  33.         SLL[k] . cur = SLL[0] . cur ;
  34.         SLL[0] . cur = k            ;
  35.         return 1                    ;
  36. }

  37. int del(struct staticLinkList SLL[] , int n){
  38.         int s = MAX - 1 , i , k                        ;
  39.         for(i = 0 ; i < n - 1 ; i ++) s = SLL[s] . cur ;
  40.         k = SLL[s] . cur                               ;
  41.         SLL[s] . cur = SLL[k] . cur                    ;
  42.         Free(SLL , k)                                  ;
  43.         return 1                                       ;
  44. }

  45. int main(void){
  46.         int op , i , j                                                                                                         ;
  47.         bool f                                                                                                                 ;
  48.         f = true                                                                                                               ;
  49.         while(f) {
  50.                 printf("请选择需要的操作:\n")                                                                                 ;
  51.                 printf("1 初始化静态链表\n2 插入元素\n3 删除元素\n4 显示\n5 退出\n")                                           ;
  52.                 scanf("%d" , & op)                                                                                             ;
  53.                 switch(op){
  54.                         case 1: init(SLL) ; break                                                                              ;
  55.                         case 2: printf("请输入要插入的位置与数字:") ; scanf("%d%d" , & i , & j) ; insert(SLL , i , j) ; break ;
  56.                         case 3: printf("请输入要删除的元素的位置:") ; scanf("%d" , & i) ; del(SLL , i) ; break                ;
  57.                         case 4: for(i = 0 ; i < MAX ; i ++) printf("%2d - %2d\n" , SLL[i] . data , SLL[i] . cur) ; break       ;
  58.                         case 5: f = false                                                                                      ;
  59.                 }
  60.         }
  61.         return 0                                                                                                               ;
  62. }
复制代码


        此外,建议楼主最好不要使用 Free() 这样的函数名,容易与系统函数混淆。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-12 19:13:01 | 显示全部楼层
jackz007 发表于 2019-2-12 16:38
代码问题颇多,现在已经调通,功能细节问题楼主可以自行斟酌修改。

好的,感谢指正。我下次会注意的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-12 19:15:12 | 显示全部楼层
BngThea 发表于 2019-2-12 12:27
形参中的SLL并不是你初始化的SLL
用指针形式来作为形参

我想大佬应该能看出这个是静态链表把?静态链表不就是给没有指针的语言用的么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 21:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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