|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- #include <stdlib.h>
- #define MAX 100
- struct staticLinkList{
- int data;
- int cur;
- }SLL[MAX];
- 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[MAX]);break;
- case 2: printf("请输入要插入的位置与数字:");scanf("%d%d",&i,&i);insert(SLL[MAX],i,j);break;
- case 3: printf("请输入要删除的元素的位置:");scanf("%d",&i);del(SLL[MAX],i);break;
- case 4: exit(1);
- return 0;
- }
- int init(struct staticLinkList SLL){
- int i;
- for(i = 0;i < MAX - 1;i++){
- SLL[i].data = 0;
- SLL[i].cur = i + 1;
- }
- SLL[MAX - 1].cur = 0;
- return 1;
- }
- int Malloc_SLL(struct staticLinkList SLL){
- int f; // 接收备用链表的起始位置
- f = SLL[0].cur;
- if(SLL[0].cur ){
- SLL[0].cur = SLL[f].cur;
- }
- return f;
- }
- int insert(struct staticLinkList SLL,int n,int m){
- int f = Malloc_SLL(SLL);
- SLL[f].data = n;
- int s = MAX - 1,i;
- for(i = 0;i < m - 1;i++){
- s = SLL[s].cur;
- }
- SLL[f].cur = SLL[s].cur;
- SLL[s].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[s].cur;
- }
- k = SLL[s].cur
- SLL[s].cur = SLL[k].cur;
- Free(SLL,k);
- return 1;
- }
- int Free(struct staticLinkList SLL,int k){
- SLL[k].cur = SLL[0].cur;
- SLL[0].cur = k;
-
- return 1;
- }
复制代码
[Error] subscripted value is neither array nor pointer nor vector
请问这个错误是怎么一回事?
本帖最后由 jackz007 于 2019-2-12 16:57 编辑
代码问题颇多,现在已经调通,功能细节问题楼主可以自行斟酌修改。
- #include <stdio.h>
- #include <stdlib.h>
- #define MAX 100
- struct staticLinkList{
- int data ;
- int cur ;
- }SLL[MAX] ;
- int init(struct staticLinkList SLL[]){
- int i;
- for(i = 0;i < MAX - 1;i++){
- SLL[i].data = 0;
- SLL[i].cur = i + 1;
- }
- SLL[MAX - 1].cur = 0;
- return 1;
- }
- int Malloc_SLL(struct staticLinkList SLL[]){
- int f ; // 接收备用链表的起始位置
- f = SLL[0] . cur ;
- if(SLL[0] . cur ) SLL[0] . cur = SLL[f] . cur ;
- return f;
- }
- int insert(struct staticLinkList SLL[] , int n , int m){
- int f = Malloc_SLL(SLL) ;
- SLL[f] . data = n ;
- int s = MAX - 1 , i ;
- for(i = 0 ; i < m - 1 ; i ++) s = SLL[s] . cur ;
- SLL[f] . cur = SLL[s] . cur ;
- SLL[s] . cur = f ;
- return 1 ;
- }
- int Free(struct staticLinkList SLL[] , int k){
- SLL[k] . cur = SLL[0] . cur ;
- SLL[0] . 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[s] . cur ;
- k = SLL[s] . cur ;
- SLL[s] . cur = SLL[k] . 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[i] . data , SLL[i] . cur) ; break ;
- case 5: f = false ;
- }
- }
- return 0 ;
- }
复制代码
此外,建议楼主最好不要使用 Free() 这样的函数名,容易与系统函数混淆。
|
|