佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1024|回复: 5

C Programming:Linked List 如何delete指定的record??

[复制链接]
发表于 11-8-2006 03:00 AM | 显示全部楼层 |阅读模式
我在研究着C语言,有不明白的地方想问:

typedef struct job //self-referential structure
{
        char id[5];
        int priority;
        int length;
        char description[100];
        struct job *next;
}JOB;

void main()
{
        JOB * addNewJob(JOB *);
        void del(JOB *),view(JOB *);
       
        int choice;
        char pause;
        JOB *start;
        start=NULL;
        .
        .
        .
        .
}
        .
我做了Linked List,完成了insert的function,insert过后,但不懂如何delete指定的record,不清楚怎样用 free();
下面是试做,只delete到指定record里 id 一项,其它保留没被洗掉:

void del(JOB *start)
{   

     JOB *curr, tempPtr;
         
     char tempID[5];
     
     printf("Enter the ID that you want to delete: \n";
     gets(tempID);fflush(stdin);
     
     for(curr=start;curr!=NULL;curr=curr->next)
     {
        printf("%p ,curr  in del loop \n\n",curr);
        if( 0 == strcmp(curr->id,tempID))
          break;
     }
     
     tempPtr = *curr; //testing
     free(tempPtr);
}

有哪位大大可教我吗?谢谢
回复

使用道具 举报


ADVERTISEMENT

发表于 11-8-2006 10:52 AM | 显示全部楼层

回复 #1 crovoseas 的帖子

把你的其他function也放上來看看?
回复

使用道具 举报

发表于 11-8-2006 12:00 PM | 显示全部楼层
void del(JOB *start)<<首先你parameter要有你要delete的item
{   

     JOB *curr, tempPtr;
         
     char tempID[5];
     
     printf("Enter the ID that you want to delete: \n";
     gets(tempID);fflush(stdin);
     
     for(curr=start;curr!=NULL;curr=curr->next)
     {
        printf("%p ,curr  in del loop \n\n",curr);
        if( 0 == strcmp(curr->id,tempID)) <<--
我很奇怪你stop的时候是用什么parameter来stop的,不是需要ID of the item that you wanna delete 吗?
          break;
     }
     
     tempPtr = *curr; //testing
     free(tempPtr);
}
回复

使用道具 举报

发表于 11-8-2006 12:30 PM | 显示全部楼层
回复 #3 haroldlbc 的帖子
     for(curr=start;curr!=NULL;curr=curr->next)
     {
        printf("%p ,curr  in del loop \n\n",curr);
        if( 0 == strcmp(curr->id,tempID)) <<--
我很奇怪你stop的时候是用什么parameter来stop的,不是需要ID of the item that you wanna delete 吗?          break;
     }


这一段没问题,因为他有让user enter search的id。。。所以不需要parameter。。

     printf("Enter the ID that you want to delete: \n" );
     gets(tempID);fflush(stdin);


回复 #1 crovoseas 的帖子
     free(tempPtr);

这个应该会有compile error吧? free的parameter需要用pointer。。。

应该,还需要previous pointer之类的东西。。。
pre->next = curr->next;
free(curr);

希望,我没教错。。。几年没用link list了。。。
回复

使用道具 举报

发表于 11-8-2006 12:45 PM | 显示全部楼层
原帖由 meemee 于 11-8-2006 12:30 PM 发表
回复 #3 haroldlbc 的帖子


这一段没问题,因为他有让user enter search的id。。。所以不需要parameter。。



回复 #1 crovoseas 的帖子

这个应该会有compile error吧? free的parameter需要用pointe ...

嗯,差不多忘记了。

因为这是考试用的知识。
回复

使用道具 举报

 楼主| 发表于 13-8-2006 12:06 AM | 显示全部楼层
原帖由 haroldlbc 于 11-8-2006 12:45 PM 发表

嗯,差不多忘记了。

因为这是考试用的知识。

原帖由 meemee 于 11-8-2006 12:30 PM 发表
回复 #3 haroldlbc 的帖子


这一段没问题,因为他有让user enter search的id。。。所以不需要parameter。。

回复 #1 crovoseas 的帖子

这个应该会有compile error吧? free的parameter需要用pointe ...


谢谢你们热心的回覆,问题解决了。两位启发了我一些idea,是我的logic有问题,我参考了其它就容易的例子

回复

使用道具 举报

Follow Us
您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 12-8-2025 04:54 AM , Processed in 0.093066 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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