| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 420 人关注过本帖
标题:各位大虾,我的链表为什么删除功能执行不了啊
只看楼主 加入收藏
陈便往
Rank: 2
等 级:论坛游民
帖 子:61
专家分:32
注 册:2011-9-21
结帖率:55.56%
收藏
已结贴  问题点数:20 回复次数:3 
各位大虾,我的链表为什么删除功能执行不了啊
#include<stdio.h>
#include<stdlib.h>
typedef struct part
{
    int number;
    struct part *next;
}node;
node *search(node*head,int n);
node*insert(node*head,int n);
node*dele(node*head,int n);
void print(node*head);
int main()
{
    node*head=NULL;
    char ch;
    int n;
    for(; ;)
    {
        printf("input ch");
        scanf(" %c",&ch);
        switch(ch)
        {
        case'i':
            printf("input n");scanf("%d",&n);
            head=insert(head,n);
            break;
        case'd':
            printf("input n");
            scanf("%d",&n);
            head=dele(head,n);
            break;
        case's':
            printf("input n");
            scanf("%d",&n);
            head=search(head,n);
            break;
        case'p':
            print(head);break;
        default:
           printf("you make a mistake");
        }
    }
}
node* insert(node*head,int n)
{
    node *new_node;
    new_node=malloc(sizeof(node));
    if(new_node==NULL)
    {
        printf("no space lefted");
        exit(0);
    }
    else
    {new_node->number=n;
      new_node->next =head;
      return new_node;
    }
}
node *dele(node*head,int n)
{
    node *ctr,*ptr;
    for(ctr=head,ptr=NULL;ctr->number !=n&&ctr!=NULL;ptr=ctr,ctr=ctr->next)
        ;
    if(ctr=NULL)
        return head;
    if(ptr=NULL)
        head=head->next;
    else
        ptr->next=ctr->next;
    free(ctr);
    return head;
}
node *search(node*head,int n)
{
    node *ptr;
    for(ptr=head;ptr!=NULL;ptr=ptr->next)
        if(ptr->number=n)
            return ptr;
    else
        return NULL;
}
void print(node*head)
{
    node *ptr;
    for(ptr=head;ptr!=NULL;ptr=ptr->next)
        printf("%d",ptr->number);
}
搜索更多相关主题的帖子: dele include search number 
2011-11-12 14:03
恶人打劫
Rank: 2
等 级:论坛游民
帖 子:14
专家分:39
注 册:2011-5-17
收藏
得分:10 
node *dele(node*head,int n)
{
    node *ctr,*ptr;
    for(ctr=head,ptr=NULL;ctr->number !=n&&ctr!=NULL;ptr=ctr,ctr=ctr->next)
        ;
    if(ctr=NULL)
        return head;
    if(ptr=NULL)
        head=head->next;
    else
        ptr->next=ctr->next;
    free(ctr);
    return head;

把for里的ptr=ctr放于程序里去,你第一次执行for的时候要使ptr=ctr要在else前执行一次吧。
2011-11-12 16:16
天际1
Rank: 2
等 级:论坛游民
帖 子:10
专家分:13
注 册:2010-8-22
收藏
得分:10 
变量用的太混乱,head为链表的头指针地址应不变,而你的在每次插入每次删除每次查询后head都发生了变化。从插入都有错误。一般都用head为空指针
2011-11-12 16:44
天际1
Rank: 2
等 级:论坛游民
帖 子:10
专家分:13
注 册:2010-8-22
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>

typedef struct part
{
    int number;
    struct part *next;
}node;
node *search(node*head,int n);
node*insert(node*head,int n);
node*dele(node*head,int n);
void print(node*head);
//
int main()
{
    node *head;
    head=(node *)malloc(sizeof(node));
    head->next=NULL;
    node *last;
    char ch;
    int n;
    for(; ;)
    {
        printf("input ch\n");
        scanf(" %c",&ch);
        switch(ch)
        {
        case'i':
            printf("input n");scanf("%d",&n);
            last=insert(head,n);
            break;
        case'd':
            printf("input n");
            scanf("%d",&n);
            last=dele(head,n);
            break;
        case's':
            printf("input n");
            scanf("%d",&n);
            last=search(head,n);
            break;
        case'p':
            print(head);break;
        default:
           printf("you make a mistake");
        }
    }
return 1;}

node* insert(node *head,int n)
{
    node *new_node;
    new_node=(node *)malloc(sizeof(node));
    if(new_node==NULL)
    {
        printf("no space lefted");
        exit(0);
    }
    else
    {new_node->number=n;
    node *middle;
    middle=head;
    while(middle->next!=NULL)
      middle=middle->next;
      middle->next=new_node;
      new_node->next=NULL;
      return new_node;
    }
}

node * dele(node*head,int n)
{
    node *ctr,*ptr,*del;
    for(ctr=head->next,ptr=head;ctr->number !=n&&ctr!=NULL;ptr=ctr,ctr=ctr->next);
        
    if(ctr==NULL)
        return head;
    else
    {ptr->next=ctr->next;
     del=ctr;
   
    free(ctr);}

    return del;
}

node *search(node*head,int n)
{
    node *ptr;
    for(ptr=head;ptr!=NULL;ptr=ptr->next)
        if(ptr->number=n)
            return ptr;
    else
        return NULL;
}

void print(node*head)
{
    node *ptr;
    for(ptr=head->next;ptr!=NULL;ptr=ptr->next)
        printf("%d   ",ptr->number);
}
程序代码:
#include<stdio.h>
#include<stdlib.h>

typedef struct part
{
    int number;
    struct part *next;
}node;
node *search(node*head,int n);
node*insert(node*head,int n);
node*dele(node*head,int n);
void print(node*head);
//
int main()
{
    node *head;
    head=(node *)malloc(sizeof(node));
    head->next=NULL;
    node *last;
    char ch;
    int n;
    for(; ;)
    {
        printf("input ch\n");
        scanf(" %c",&ch);
        switch(ch)
        {
        case'i':
            printf("input n");scanf("%d",&n);
            last=insert(head,n);
            break;
        case'd':
            printf("input n");
            scanf("%d",&n);
            last=dele(head,n);
            break;
        case's':
            printf("input n");
            scanf("%d",&n);
            last=search(head,n);
            break;
        case'p':
            print(head);break;
        default:
           printf("you make a mistake");
        }
    }
return 1;}

node* insert(node *head,int n)
{
    node *new_node;
    new_node=(node *)malloc(sizeof(node));
    if(new_node==NULL)
    {
        printf("no space lefted");
        exit(0);
    }
    else
    {new_node->number=n;
    node *middle;
    middle=head;
    while(middle->next!=NULL)
      middle=middle->next;
      middle->next=new_node;
      new_node->next=NULL;
      return new_node;
    }
}

node * dele(node*head,int n)
{
    node *ctr,*ptr,*del;
    for(ctr=head->next,ptr=head;ctr->number !=n&&ctr!=NULL;ptr=ctr,ctr=ctr->next);
       
    if(ctr==NULL)
        return head;
    else
    {ptr->next=ctr->next;
     del=ctr;
   
    free(ctr);}

    return del;
}

node *search(node*head,int n)
{
    node *ptr;
    for(ptr=head;ptr!=NULL;ptr=ptr->next)
        if(ptr->number=n)
            return ptr;
    else
        return NULL;
}

void print(node*head)
{
    node *ptr;
    for(ptr=head->next;ptr!=NULL;ptr=ptr->next)
        printf("%d   ",ptr->number);
} 
2011-11-12 16:46
快速回复:各位大虾,我的链表为什么删除功能执行不了啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012546 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved