Code Bye

数据结构链表和串的初始化问题

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
#define MAXKEYNUM 2500 //引索表的最大容量–
#define MAXLINELEN 500 //数目串的最大长度 缓冲区长度–
#define MAXWORDNUM 10 //词表的最大容量–
#define MAXWORDLEN 100//关键词的最大容量–
typedef int Status;
typedef struct{
char *ch;
int length;
}Hstring;
typedef struct{
char *item[MAXWORDNUM];
int last;
}Wordlisttype; //词表类型
typedef int Elemtype;
typedef struct Lnode{
Elemtype data[3];
struct Lnode *next;
}Lnode,*Link,*Linklist;//*号放在前边
typedef struct{
Hstring key;//关键词
Linklist bnolist;//存放书号索引的链表
}Idextermtype;//索引项类型
typedef struct {
Idextermtype item[MAXKEYNUM+1];
int last;
}Idexlisttype;
Idexlisttype idxlist;
void Initidxlist(Idexlisttype *idxlist);
void Init_Hstring(Hstring *wd);
Status Initlist(Linklist L);
int main()
{
Initidxlist(&idxlist);
return 0;
}
Status Initlist(Linklist L)
{
int ct;
if(!(L = (Link)malloc(sizeof(Lnode))))
return OVERFLOW;
for(ct=0;ct<3;ct++)
if(!(L->data[ct] = (int)malloc(sizeof(int))))
return OVERFLOW;
L->next = NULL;
return OK;
}//initlist;
void Init_Hstring(Hstring *wd)
{
int ct;
wd->ch = (char *)malloc(MAXWORDLEN*sizeof(char));
for(ct=0;ct<MAXWORDLEN;ct++){
wd->ch[ct] = “\0”;
}
wd->length = 0;
}
void Initidxlist(Idexlisttype *idxlist)
{
int ct;
for(ct=0;ct<MAXKEYNUM;ct++){
Init_Hstring(&(idxlist->item[ct].key));
Initlist(idxlist->item[ct].bnolist);
}
printf(“????????????\n”);
if(idxlist->item[0].bnolist->next==NULL)//–这里有问题
printf(“????????????\n”);
idxlist->last = 0;
}
解决方案

80

Initlist(idxlist->item[ct].bnolist);这样的传参方式(一级指针)是没有用的,在Initlist函数里操作的只是一个指针的拷贝
改成传二级指针或一级指针的引用
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
#define MAXKEYNUM 2500 //引索表的最大容量--
#define MAXLINELEN 500 //数目串的最大长度 缓冲区长度--
#define MAXWORDNUM 10 //词表的最大容量--
#define MAXWORDLEN 100//关键词的最大容量--
typedef int Status;
typedef struct{
    char *ch;
    int length;
}Hstring;
typedef struct{
    char *item[MAXWORDNUM];
    int last;
}Wordlisttype; //词表类型
typedef int Elemtype;
typedef struct Lnode{
    Elemtype data[3];
    struct Lnode *next;
}Lnode,*Link,*Linklist;//*号放在前边
typedef struct{
    Hstring key;//关键词
    Linklist bnolist;//存放书号索引的链表
}Idextermtype;//索引项类型
typedef struct {
    Idextermtype item[MAXKEYNUM+1];
    int last;
}Idexlisttype;
Idexlisttype idxlist;
void Initidxlist(Idexlisttype *idxlist);
void Init_Hstring(Hstring *wd);
Status Initlist(Linklist *L);
int main()
{
    Initidxlist(&idxlist);
    return 0;
}
Status Initlist(Linklist *L)
{
    int ct;
    if(!(*L = (Link)malloc(sizeof(Lnode))))
        return OVERFLOW;
    for(ct=0;ct<3;ct++)
        if(!((*L)->data[ct] = (int)malloc(sizeof(int))))
            return OVERFLOW;
    (*L)->next = NULL;
    return OK;
}//initlist;
void Init_Hstring(Hstring *wd)
{
    int ct;
    wd->ch = (char *)malloc(MAXWORDLEN*sizeof(char));
    for(ct=0;ct<MAXWORDLEN;ct++){
        wd->ch[ct] = "\0";
    }
    wd->length = 0;
}
void Initidxlist(Idexlisttype *idxlist)
{
    int ct;
    for(ct=0;ct<MAXKEYNUM;ct++){
        Init_Hstring(&(idxlist->item[ct].key));
        Initlist(&idxlist->item[ct].bnolist);
    }
    printf("????????????\n");
    if(idxlist->item[0].bnolist->next==NULL)//--这里有问题
        printf("????????????\n");
    idxlist->last = 0;
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明数据结构链表和串的初始化问题