从头文件

时间:2017-05-24 12:35:58

标签: c

我的教授给我发了一个库来插入,删除和搜索链表中的元素:

#include <stdlib.h>

struct NODE
{
    char AM[12];
    char name[40];
    int semester;
    struct NODE *head;
    struct NODE *next;
    struct NODE *prev;
};

void init(struct NODE **head)
{
    *head=NULL;
}

struct NODE *Search (struct NODE *head,char CODE[],struct NODE **prev)
{
    struct NODE *tmp;
    *prev=NULL;
    tmp=head;
    while (tmp!=NULL && tmp->AM<CODE)
    {
        *prev=tmp;
        tmp=tmp->next;
    }
    if (tmp==NULL)
    return NULL;
    if (tmp->AM==CODE)
    return tmp;
    return NULL;
}

struct NODE *Search2 (struct NODE *head,char name[],struct NODE **prev)
{
    struct NODE *tmp;
    *prev=NULL;
    tmp=head;
    while (tmp!=NULL && tmp->name<name)
    {
        *prev=tmp;
        tmp=tmp->next;
    }
    if (tmp==NULL)
    return NULL;
    if (tmp->name==name)
    return tmp;
    return NULL;
}

int Insert (struct NODE **H,struct NODE P)
{
    struct NODE *cur,*prev;
    cur=Search(*H,P.AM,&prev);
    if (cur)
    return 0;
    cur=(struct NODE *)malloc(sizeof P);
    *cur=P;
    if (prev==NULL)
    {
        cur->next=*H;
        *H=cur;
    }
    else
    {
        cur -> next = prev -> next;
        prev -> next = cur;
    }
    return 1;
}

int Delete (struct NODE **H,char AM[])
{
    struct NODE *cur,*prev,*next;
    cur=Search(*H,AM,&prev);
    if (!cur)
    return 0;
    if (prev==NULL)
    cur=next;
    else
    prev->next=cur->next;
    free(cur);
    return 1;
}

void traverse (struct NODE *head)
{
    struct NODE *cur;
    cur=head;
    while (cur)
    {
        printf ("%p\n",cur);
        cur=cur->next;
    }
}

现在这里是我创建的源文件中的一段代码,试图在链表中插入一个元素:

case 1:printf ("Input AM,name and semester of student: "); 
tmp=(struct NODE *)malloc(sizeof(struct NODE)); 
if (tmp==NULL) 
exit(1); 
scanf("%s %s %d",tmp->AM,tmp->name,&tmp->semester); 
_flag=Insert(&head,*tmp); 
if(_flag) 
printf ("Student inserted succesfully!\n"); 
free(tmp);
break;

当我插入元素时,我得到&#34;学生成功插入&#34;消息,但是当我调用搜索函数来查找该元素时,它返回NULL(意味着该元素不在列表中)。如何从头文件中调用Insert函数? (我假设问题必须在插入函数中)。在main()中我也声明了以下两个:

struct NODE *head;
struct NODE *tmp;

我应该改变这两个方面吗?

1 个答案:

答案 0 :(得分:0)

我认为你的问题出现在Search()和Search2()函数中,你有这样的事情:

while (tmp!=NULL && tmp->AM<CODE)

if (tmp->AM==CODE)
return tmp;

您正在比较指针,而不是字符串的内容。如果要比较字符串,或者首先按字母顺序查找字符串,请使用strcmp()。

while (tmp!=NULL && strcmp(tmp->AM, CODE) < 0)

if (!strcmp(tmp->AM, CODE))
    return tmp;

在Search2()中使用tmp-&gt;名称和名称进行比较也是如此。