求助怎么才能把结构体数组调到函数里?
#include <stdio.h>#include <stdlib.h>
#define MAX 100
struct staticLinkList{
int data;
int cur;
}SLL;
int init(struct staticLinkList);
int Malloc_SLL(struct staticLinkList);
int insert(struct staticLinkList,int n,int m);
int del(struct staticLinkList,int n);
int Free(struct staticLinkList,int k);
int main(void){
int op,i,j;
printf("请选择需要的操作:\n");
printf("1 初始化静态链表\n2 插入元素\n 3删除元素\n4 退出\n");
scanf("%d,&op");
switch(op){
case 1: init(SLL);break;
case 2: printf("请输入要插入的位置与数字:");scanf("%d%d",&i,&i);insert(SLL,i,j);break;
case 3: printf("请输入要删除的元素的位置:");scanf("%d",&i);del(SLL,i);break;
case 4: exit(1);
return 0;
}
int init(struct staticLinkList SLL){
int i;
for(i = 0;i < MAX - 1;i++){
SLL.data = 0;
SLL.cur = i + 1;
}
SLL.cur = 0;
return 1;
}
int Malloc_SLL(struct staticLinkList SLL){
int f; // 接收备用链表的起始位置
f = SLL.cur;
if(SLL.cur ){
SLL.cur = SLL.cur;
}
return f;
}
int insert(struct staticLinkList SLL,int n,int m){
int f = Malloc_SLL(SLL);
SLL.data = n;
int s = MAX - 1,i;
for(i = 0;i < m - 1;i++){
s = SLL.cur;
}
SLL.cur = SLL.cur;
SLL.cur = f;
return 1;
}
int del(struct staticLinkList SLL,int n){
int s = MAX - 1,i,k;
for(i = 0;i < n - 1;i++){
s = SLL.cur;
}
k = SLL.cur
SLL.cur = SLL.cur;
Free(SLL,k);
return 1;
}
int Free(struct staticLinkList SLL,int k){
SLL.cur = SLL.cur;
SLL.cur = k;
return 1;
}
subscripted value is neither array nor pointer nor vector
请问这个错误是怎么一回事?
形参中的SLL并不是你初始化的SLL
用指针形式来作为形参 本帖最后由 jackz007 于 2019-2-12 16:57 编辑
代码问题颇多,现在已经调通,功能细节问题楼主可以自行斟酌修改。
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
struct staticLinkList{
int data ;
int cur;
}SLL ;
int init(struct staticLinkList SLL[]){
int i;
for(i = 0;i < MAX - 1;i++){
SLL.data = 0;
SLL.cur = i + 1;
}
SLL.cur = 0;
return 1;
}
int Malloc_SLL(struct staticLinkList SLL[]){
int f ; // 接收备用链表的起始位置
f = SLL . cur ;
if(SLL . cur ) SLL . cur = SLL . cur ;
return f;
}
int insert(struct staticLinkList SLL[] , int n , int m){
int f = Malloc_SLL(SLL) ;
SLL . data = n ;
int s = MAX - 1 , i ;
for(i = 0 ; i < m - 1 ; i ++) s = SLL . cur ;
SLL . cur = SLL . cur ;
SLL . cur = f ;
return 1 ;
}
int Free(struct staticLinkList SLL[] , int k){
SLL . cur = SLL . cur ;
SLL . cur = k ;
return 1 ;
}
int del(struct staticLinkList SLL[] , int n){
int s = MAX - 1 , i , k ;
for(i = 0 ; i < n - 1 ; i ++) s = SLL . cur ;
k = SLL . cur ;
SLL . cur = SLL . cur ;
Free(SLL , k) ;
return 1 ;
}
int main(void){
int op , i , j ;
bool f ;
f = true ;
while(f) {
printf("请选择需要的操作:\n") ;
printf("1 初始化静态链表\n2 插入元素\n3 删除元素\n4 显示\n5 退出\n") ;
scanf("%d" , & op) ;
switch(op){
case 1: init(SLL) ; break ;
case 2: printf("请输入要插入的位置与数字:") ; scanf("%d%d" , & i , & j) ; insert(SLL , i , j) ; break ;
case 3: printf("请输入要删除的元素的位置:") ; scanf("%d" , & i) ; del(SLL , i) ; break ;
case 4: for(i = 0 ; i < MAX ; i ++) printf("%2d - %2d\n" , SLL . data , SLL . cur) ; break ;
case 5: f = false ;
}
}
return 0 ;
}
此外,建议楼主最好不要使用 Free() 这样的函数名,容易与系统函数混淆。 jackz007 发表于 2019-2-12 16:38
代码问题颇多,现在已经调通,功能细节问题楼主可以自行斟酌修改。
好的,感谢指正。我下次会注意的
BngThea 发表于 2019-2-12 12:27
形参中的SLL并不是你初始化的SLL
用指针形式来作为形参
我想大佬应该能看出这个是静态链表把?静态链表不就是给没有指针的语言用的么
页:
[1]